自学Java第三十七课
今天学习了io中的特殊操作流,不同于我们平常使用的字符流、字节流,特殊操作流包含平常不太常用的流,但比较重要。
标准输入输出流
System中的两个静态成员变量
public static final InputStream in标准输入流,键盘输入、主机环境、键盘用户指定另一束出院
public static final OutputStream out标准输出流,显示输出、主机环境、用户指定另一输出目标
手动键盘录入:BufferedReader br=new BufferedReader(new InputStreamReader(System.in)),与Scanner类似。
System.out本质是标准输出流 PrintStream ps=System.out;
PrintStream 类有的方法,System.out都可以使用
打印流
可分为字节打印流(PrintStream)和字符打印流(PrintWriter)
特点:①只输出数据,不读取数据;②有自己特有的方法。
字节打印流 PrintStream(String fileName):使用指定文件名创建新的打印流
注:①使用继承父类写数据,查看时会转码(Write());②是用自己特有的方法写数据,数据原样输出(print()).
字符打印流构造方法
PrintWrite(String fileName) | 使用指定文件名创建新的PrintWrite,不需要自动刷新 |
PrintWrite(writer out,boolean autoFlush) |
创建一个新的PrintWriter,out:字符输出流 autoFlush:布尔值,若为true,则println、printf、format方法刷新缓冲区 |
对象序列化流
对象序列化:将对象保存到磁盘中,或在网络上传输对象。一个字节序列表示一个对象,字节序列包含对象基本信息。
对象序列化流:ObjectOutputStream;对象反序列化流:ObjectInputStream
序列化流
将Java原始数据和图形写入OutputStream,可以用ObjectInputStream读取对象,可通过使用流文件来实现对象持久存储。如果流是网络套接字流,可以在另一主机或另一进程中重构对象
构造方法 ObjectOutputStream(OutputStream out):创建一个写入OutputStream的ObjectOutputStream。
序列对象方法 void write Object(Object obj):将指定对象写入ObjectOutputStream
注:①一个对象要想被序列化,对象所属类必须实现Serializable接口;②Serializable是一个标记接口,不需要重写方法。
反序列化流
ObjectInputStream(InputStream in):创建从指定的InputStream读取的ObjectInputstream
方法
Object readObject():从ObjectInputStream
对象序列化的三个问题
①序列化一个对象后,修改对象所属类文件,读取文件会发生什么? 抛出InvalidClassException异常
②解决方法?给对象所属类加一个SerialVersionUID,private static final long serialVersionUID-42L;
③变量不想被序列化?给变量加transient修饰,该变量不参与序列化进程
Properties
①是一个Map体系集合类
②Properties可保存到流中或从流中加载
Properties特有方法
Object setProperty(String key,String value) | 设置集合的键值,String,底层调用HashSet方法put |
String getProperty(String key) | 使用此属性列表指定键搜索属性 |
Set<String>stringPropertyNames() | 返回一个不可修改的键集,键及其对应的值是字符串 |
Properties和io流结合方法
void load(InputStream in Stream) | 从输入字节流读取属性列表(键和元素对) |
void load(Reader reader) | 从输入字符流读取属性列表(键和元素对) |
void store(OutputStream out,String comments) | 将此属性列表写入次Properties表中,一适合于使用load(Input Stream)的方法格式写入输出字节流 |
void store(Writer writer,String comments) | 将此属性列表写入次Properties表中,一适合于使用load(Input Stream)的方法格式写入输出字符流 |