转换流和对象流

目录

    • 一、转换流
      • 输入字节流——字符流:InputStreamReader类
      • 输出字节流——字符流:OutputStreamWriter类
    • 二、对象流

一、转换流

输入字节流——字符流:InputStreamReader类

InputStreamReader类是Reader的子类,可以将一个字节输入流转变成字符输入流,在转换时默认使用本地操作系统的字符编码或者指定其他字符编码,常用方法如下:

方法名 作用
InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader对象
InputStreamReader(InputStream in,Charset cs) 创建一个使用指定字符集的InputStreamReader对象
InputStreamReader(InputStream in,CharsetDecoder dec) 创建一个使用指定字符解码器的InputStreamReader对象
InputStreamReader(InputStream in,String str) 创建一个使用指定字符集的InputStreamReader对象
getEncoding() 返回当前流使用的字符编码名称

输出字节流——字符流:OutputStreamWriter类

OutputStreamWriter类是Writer的子类,可以将一个字节输出流转变成字符输出流,在转换时默认使用本地操作系统的字符编码或者指定其他字符编码,常用方法:

方法名 作用
OutputStreamWrider(OutputStream out) 创建一个使用默认字符集的OutputStreamWrider对象
OutputStreamWrider((OutputStream out,Charset cs) 创建一个使用指定字符集的OutputStreamWrider对象
OutputStreamWrider((OutputStream out,CharsetDecoder dec) 创建一个使用指定字符解码器的OutputStreamWrider对象
OutputStreamWrider((OutputStream out,String str) 创建一个使用指定字符集的OutputStreamWrider对象
getEncoding() 返回当前流使用的字符编码名称

终端都是字节实现的;

转换流和对象流_第1张图片

二、对象流

对象输入流:ObjectInputStream
对象输出流:ObjectOutputStream

因为ObjectOutputStream/ObjectInputStream是处理流、高级流;所有它们创建实例对象时需要节点流、低级流(OutputStream/InputStream)为参数来构建的;

该流的主要作用是实现对对象的序列化和反序列化:
序列化:将对象转换为字节的过程
反序列化:将字节转化为对象的过程

序列化的作用:
1、对象存储到本地磁盘需要序列化;
2、数据在网络中传输需要序列化;

注意:
1、在java中,对象序列化只有类实现了java.io.Serializable才能被序列化;该接口什么方法都没有,实现原理是:给对象打个标记,序列化的时候相关方法会用;
2、对象的序列化和反序列化需要通过ObjectOutputStream和ObjectInputStream;
3、每一个对象都有一个唯一的标识:序列化id,serialVersionUID,它的生成方式有两种,1是默认的1L,2是当前系统根据当前的对象的属性生成唯一的id;
序列化id:序列化的版本号,每个类都有唯一的一个版本号(序列化作用在网络传输和本地存储,序列化id与对象的属性有关系,属性的增加(反序列化时会兼容)和减少(反序列化时抛异常)都会引起序列化id的变化);
4、transient修饰的属性不会被序列化,在变量前添加该关键字,在序列化过程中该变量不会写入,反序列化给那个变量默认初始值:eg int–0 Object–null;作用是防止敏感数据传输。

序列化的相关代码

下面是一个jdk1.8中java.io.Serializable接口是如何标记使用的过程:

转换流和对象流_第2张图片
转换流和对象流_第3张图片

你可能感兴趣的:(I/O)