本文共 834 字,大约阅读时间需要 2 分钟。
InputStream,OutputStream 前者为字节输入流,后者为字节输出流。为所有字节流的顶级父类。
Reader Writer 前者为字符输入流,后者为字符输出流。为所有字符流的顶级父类。 四个均为抽象类。
FileInputStream与FileReader区别:
FileInputStream是字节流,FileReader是字符流,用字节流读取中文的时候,可能会出现乱码,而用字符流则不会出现乱码,而且用字符流读取的速度比字节流要快;
字节流读取单位为一个字节,字符流读取单位为一个字符 所以读取汉字的时候,如果用字节流就会导致读出来乱码。这是最常用的地方 其他基本用法差不多。
ObjectOutputStream与ByteArrayOutputStream的区别:
ObjectOutputStream可以将java对象写入outputstream流中(序列化),然后进行持久化,此对象必须是实现了java.io.Serializable 接口;
ByteArrayOutputStream是将数据写入byte数组中。
转换流:InputStreamReader和OutputStreamWriter:其作用是为了将字节流InputStream,OutputStream转换为
字符流,这样会有效的提高文件传输的速度。具体使用方法:
public InputStreamReader(InputStream in)
public InputSreamReader(InputStream in,String charsetName)
Java的IO模型设计非常优秀,它使用Decorator(装饰者)模式,按功能划分Stream,您可以动态装配这些Stream,以便获得您需要的功能。
例如,您需要一个具有缓冲的文件输入流,则应当组合使用FileInputStream和BufferedInputStream。
附带几张各输入输出流类之间的关系: