day19 IO-2 包装流 标准输入输出流 打印流 Properties 对象流和序列化
2017-01-15 12:08
686 查看
文件流: 程序和文件做IO操作.
FileInputStream
FileOutputStream
FileReader
FileWriter
转换流: 把字节流转换为字符流.
InputStreamReader
OutputStreamWriter
内存流: 把数据先临时的缓存在内存中,(收集数据).先不讲.
ByteArrayInputStream
ByteArrayOutputStream
CharArrayReader
CharArrayWrier
-----------------------------------------------------
缓冲流:属于包装流,(内部提高了8Kb的缓冲区)
包装流(缓冲流):使用该流对象的时候,需要包裹另一个流,来提高IO性能.
节点流:没有使用其他包转流的流.
在IO中存在一个装饰设计模式(包装设计模式),大神班讲非法文字过滤.
装饰设计模式的目的:在不改变原有对象的基础之上,对原有对象做增强操作.
BufferedInputStream: 字节输入流的缓冲流,专门用来包装InputStream的.
BufferedOutputStream: ,专门用来包装 OutputStream的.
BufferedReader:
BufferedWriter:
字节包装流
标准的输入和输出流:System类有常量:
标准输入流: 通过键盘录入的数据的方式.InputStream input =System.in;//接受键盘录入的数据
标准输出流: 在控制台输出结果的方式. OutputStream output = System.out;//在控制台中输出数据
标准输入流的重定向:
标准输入流表示从键盘接受输入数据, 把接收的位置变成一个文件.
System.setIn(...);
标准输出流的重定向:
标准输出流表示把数据输出在控制台中,我可以改变输出方向到一个文件中去.
System.setOut(...);
打印流
打印流: 令人最Happy的一点,可以输出任意的数据类型.
PrintStream: 字节打印流.
PrintWriter: 字符打印流.
Properties类
Hashtable类是Map的实现类,而Properties类又是Hashtable的子类.
---->Properties本身就是Map接口的实现类,体现着key-value.
然而我们一般称之为属性类.
我们把key称之为属性名,把value称之为属性值.
和Hashtable相比:
Hashtable中的key和value都可以是Object类型.
而在Properties类中所有的属性名和属性值都是String类型.
为什么需要使用配置文件--->为了避免硬编码:
所谓硬编码,可以简单的理解为在代码中把某一个或多个数据给写死了(若需要修改必须修改源代码).
比如:学习数据库,数据库有账号和密码,我们做开发就需要在Java中去连接数据库.
String username = "root";
String password = "admin";
...省略的代码....
此时若实施人员,需要修改密码,只能修改源代码.
解决方案:把这种写死的数据,提取到专门的配置文件中来,即使需要修改,只需要修改配置文件即可.
-------------------------------------------------------
在Java中:配置文件(XML/properties).
--------------------------------------------------------
文件名.properties文件,我们称之为属性文件,是Java中配置文件的一种.
属性名=属性值
什么是序列化:
把对象值的数据信息以二进制的格式保存起来.
反序列化: 把二进制的对象信息,恢复成对象.
为什么要做序列化:
1):方便网络传输.
2):把对象数据持久化在磁盘中.
序列化和对象流有何关系:
为了方便把对象信息存储到磁盘,java的IO就提供了对象流,专门用来操作对象和二进制之间的转换操作.
ObjectOutputStream: 把对象转换为二进制.
ObejctInputStream: 把二进制数据读进程序,恢复成对象.
-----------------------------------------------------------------------------
怎么做序列化:
注意:被对象流操作的对象,必须实现java.io.Serializable接口.
实现java.io.Serializable接口的类中:
若字段使用static,或者transient修饰,则不会被序列化.
static:因为static表示类的成员,不是对象的成员.
transient:限定某个字段不被序列化的,比如密码.
-----------------------------------------------------------------------------
为了检验对象和二进制文件中的数据的一致性,习惯生产出一个序列化ID.
这里有个User类是实现了Serializable接口的,提供了三个变量的有参构造器和无参构造器
FileInputStream
FileOutputStream
FileReader
FileWriter
转换流: 把字节流转换为字符流.
InputStreamReader
OutputStreamWriter
内存流: 把数据先临时的缓存在内存中,(收集数据).先不讲.
ByteArrayInputStream
ByteArrayOutputStream
CharArrayReader
CharArrayWrier
-----------------------------------------------------
缓冲流:属于包装流,(内部提高了8Kb的缓冲区)
包装流(缓冲流):使用该流对象的时候,需要包裹另一个流,来提高IO性能.
节点流:没有使用其他包转流的流.
在IO中存在一个装饰设计模式(包装设计模式),大神班讲非法文字过滤.
装饰设计模式的目的:在不改变原有对象的基础之上,对原有对象做增强操作.
BufferedInputStream: 字节输入流的缓冲流,专门用来包装InputStream的.
BufferedOutputStream: ,专门用来包装 OutputStream的.
BufferedReader:
BufferedWriter:
字节包装流
package _01_Buffer; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; public class BufferDemo { public static void main(String[] args) throws Exception { String src = "123.txt"; String dest = "456.txt"; BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest)); int len = -1; byte[] buffer = new byte[1024]; while((len=bis.read(buffer)) != -1){ bos.write(buffer,0,len); } } }字符包装流以及readline()
package _01_Buffer; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; public class BufferReadLineDemo { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new FileReader("123.txt")); //读取一行,如果没有了则会返回null //System.out.println(br.readLine()); char[] buffer = new char[1024]; int len= -1; while((len=br.read(buffer)) != -1){ System.out.println(new String(buffer,0,len)); } /* readLine的使用 System.out.println("----------------------------------------"); String str = null; while((str = br.readLine()) != null){ System.out.println(str); } */ br.close(); } }标准输入输出流
标准的输入和输出流:System类有常量:
标准输入流: 通过键盘录入的数据的方式.InputStream input =System.in;//接受键盘录入的数据
标准输出流: 在控制台输出结果的方式. OutputStream output = System.out;//在控制台中输出数据
标准输入流的重定向:
标准输入流表示从键盘接受输入数据, 把接收的位置变成一个文件.
System.setIn(...);
标准输出流的重定向:
标准输出流表示把数据输出在控制台中,我可以改变输出方向到一个文件中去.
System.setOut(...);
打印流
打印流: 令人最Happy的一点,可以输出任意的数据类型.
PrintStream: 字节打印流.
PrintWriter: 字符打印流.
package _02_printstream; import java.io.PrintStream; import java.io.PrintWriter; public class Demo1 { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { PrintStream ps = new PrintStream("qixi.txt"); ps.write("传统的打印方式".getBytes()); //执行后会打印到文件qixi.txt ps.print("新颖的方式"); System.out.println("----------------------------------------"); //下面是字符打印 PrintWriter pw = new PrintWriter("qixi2.txt"); pw.print("我是谁!!!"); //字符流必须关闭,不然没内容 pw.close(); } }
package _02_printstream; public class Demo2 { /** * @param args */ public static void main(String[] args) { String name = "tt"; int age = 19; System.out.printf("我是%s,今年%s", name,age); } }
Properties类
Hashtable类是Map的实现类,而Properties类又是Hashtable的子类.
---->Properties本身就是Map接口的实现类,体现着key-value.
然而我们一般称之为属性类.
我们把key称之为属性名,把value称之为属性值.
和Hashtable相比:
Hashtable中的key和value都可以是Object类型.
而在Properties类中所有的属性名和属性值都是String类型.
package _03_Properties; import java.util.Properties; public class Demo1 { /** * @param args */ public static void main(String[] args) { Properties pro = new Properties(); pro.setProperty("name", "wqy"); String name = pro.getProperty("name"); System.out.println(name); System.out.println(pro); } }
为什么需要使用配置文件--->为了避免硬编码:
所谓硬编码,可以简单的理解为在代码中把某一个或多个数据给写死了(若需要修改必须修改源代码).
比如:学习数据库,数据库有账号和密码,我们做开发就需要在Java中去连接数据库.
String username = "root";
String password = "admin";
...省略的代码....
此时若实施人员,需要修改密码,只能修改源代码.
解决方案:把这种写死的数据,提取到专门的配置文件中来,即使需要修改,只需要修改配置文件即可.
-------------------------------------------------------
在Java中:配置文件(XML/properties).
--------------------------------------------------------
文件名.properties文件,我们称之为属性文件,是Java中配置文件的一种.
属性名=属性值
package _03_Properties; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.Properties; public class DbProperties { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { Properties pro = new Properties(); InputStream in = new FileInputStream("db.properties"); pro.load(in); String username = pro.getProperty("username"); System.out.println(username); System.out.println(pro); } }对象流和序列化
什么是序列化:
把对象值的数据信息以二进制的格式保存起来.
反序列化: 把二进制的对象信息,恢复成对象.
为什么要做序列化:
1):方便网络传输.
2):把对象数据持久化在磁盘中.
序列化和对象流有何关系:
为了方便把对象信息存储到磁盘,java的IO就提供了对象流,专门用来操作对象和二进制之间的转换操作.
ObjectOutputStream: 把对象转换为二进制.
ObejctInputStream: 把二进制数据读进程序,恢复成对象.
-----------------------------------------------------------------------------
怎么做序列化:
注意:被对象流操作的对象,必须实现java.io.Serializable接口.
实现java.io.Serializable接口的类中:
若字段使用static,或者transient修饰,则不会被序列化.
static:因为static表示类的成员,不是对象的成员.
transient:限定某个字段不被序列化的,比如密码.
-----------------------------------------------------------------------------
为了检验对象和二进制文件中的数据的一致性,习惯生产出一个序列化ID.
这里有个User类是实现了Serializable接口的,提供了三个变量的有参构造器和无参构造器
相关文章推荐
- Day22 --序列流 内存输出流 随机访问流 对象操作流 数据输入输出流 打印流 标准输入输出流 Properties
- 黑马程序员__字符流_序列流_内存流_对象操作流_打印流_标准输出流_数据输入输出流及Properties
- Java基础 - 序列流,内存输出流,随机访问流,对象操作流,数据输入输出流,打印流,标准输入输出流,Properties
- 一、javaSE (二十二)登录注册IO版本案例、数据操作流、内存操作流、打印流、标准输入输出流、随机访问流、合并流、序列化流、Properties、NIO
- 黑马程序员——JAVA基础——IO(一)---流概述,节点流、处理流、转换流与标准输入输出流、打印流、File文件对象、合并流
- 序列流、对象操作流、打印流、标准输入输出流、随机访问流、数据输入输出流、Properties(二十二)
- Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,转换流,随机访问流,合并流,序列化流,Properties
- 22 API-IO流(登陆注册IO版案例,数据操作流,内存操作流,打印流,标准输入输出流,:随机访问流,合并流,序列化流),Properties,NIO)
- 黑马程序员 字符流和序列流、内存流、对象操作流、打印流、标注输出流、数据输入输出流及Properties
- Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)
- Java基础---IO(二)--Properties类、打印流、序列流、对象操作流、数据输入输出流
- 重踏学习Java路上_Day22(数据操作流,内存操作流,打印流,标准输入输出流,随机访问流,合并流,序列化流,Properties,NIO)
- Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,转换流,随机访问流,合并流,序列化流,Properties
- IO流_数据操作流、内存操作流、打印流、标准输入输出流、随机访问流、合并流、序列化流、Properties、总结
- 字节流和字符流转换、标准输入流和标准输出流、打印流、对象序列化、随机流
- JavaIO 总结笔记<五> 打印流、Properties类、对象流、序列化
- 使用对象输入输出流(ObjectOutputStream,ObjectInputStream)实现序列化对象的深度克隆
- 黑马程序员——第20天——IO输入与输出(File类,Properties,打印流,合并流,切割文件)
- 七、输入/输出流--IOStreamm基本类和标准IOStream对象--头文件和标准操纵符
- 第22天 SequenceInputStream、合并切割、对象的输入输出流、Properties配置文件、.printStream、编码与解码、转换流、递归