5月6号广州尚学堂部分笔记

今天学的是IO流

对流的理解就是:水通过水管传到水龙头。水代表着数据,比如字节或者字符,然后是先进先出的一个方式。

输入流的概念:从源数据源流入程序的过程,可以理解成从源数据源读取数据到程序的过程

输出流的概念:从程序流出源数据源的过程,可以理解成把数据从程序写入目的地的过程

数据源一般指提供数据的原始媒介,一般常见有文件、数据库、云端、其他硬件等能提供数据的媒介。

按照流向可以区分输入流和输出流

输出流是OuttputStream和Writer作为基类

按照处理单元可以区分字节流和字符流

字节流:输入流是InputStream基类,输出流是OutputStream基类

字符流:输入流Reader基类,输出流Writer基类

按照功能可以区分节点流和转换流

OutputStream 是所有字节输出流的抽象父类,提供了

write() 写入一个字节

write(byte[] buf) 写入一定量的字节到输出流

FileInputStream 文件字节输入流,专门用于从文件中读取字节到程序内存中。

FileOutputStream 文件字节输出流,专门用于从内存中写入字节到文件中

注意:

[1]字符串写入文件时一定会存在编码问题

[2]使用utf8编码写入文件时,如果不含中文时,win系统会对文件的编码造成误判。

[3] 通过字节流写入文件时,向管道写入一个字节,该字节立即写入文件中。

总结

InputStream/OutputStream 用于字节的读写。主要用于读取二进制文件(图片、音频、视频),也可以读取文件性文件。

Reader 是字符输入流的抽象父类,提供了

read 一次读取一个字符

read(char[] cbuf) 一次读取多个字符到字符缓冲区cbuf,返回长度表示读取的字符个数。

Writer 是字符输出流的抽象父类,提供了

write

write(char[] cbuf)

write(string)

FileReader 文件字符输入流,专门用于读取默认字符编码文本性文件。

FileWriter 文件字符输出流,专门用于写入默认字符编码的文本性文件。为了提高效率,FileWriter内部存在一个字节缓冲区,用于对待写入的字符进行统一编码到字节缓冲区,一定要在关闭流之前,调用flush方法刷新缓冲区。

InputStreamReader 继承于Reader,是字节流通向字符流的桥梁,可以把字节流按照指定编码 解码 成字符流。

OutputStreamWriter 继承于Writer,是字符流通向字节流的桥梁,可以把字符流按照指定的编码 编码 成字节流。

注意:

[1]win平台默认的utf8编码的文本性文件带有BOM,java转换流写入的utf8文件不带BOM。所以用java读取手动创建的utf8文件会出现一点乱码(?hello中国,?是bom导致的)

[2] 一句话:用字符集编码,一定用字符集解码!!

BufferedReader 继承于Reader,提供了

read

read(char[] cbuf)

readLine() 用于读取一行文本,实现对文本的高效读取。

BufferedReader 初始化时需要一个reader,本质上BufferedReader在reader的基础上增加readLine()的功能。

BufferedWriter继承于Writer,提供了

write

write(char[] cbuf)

write(string)

newline() 写入一个行分隔符。

你可能感兴趣的:(5月6号广州尚学堂部分笔记)