自学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)的方法格式写入输出字符流

 

 

 

 

 

 

 

posted on 2021-08-11 21:05  跨越&尘世  阅读(21)  评论(0编辑  收藏  举报