java-io基础
一、流的分类
1、按操作的数据单位或传输方式:字符流,字节流。字节是给计算机看的,字符是给人看的
2、数据的流向:输入流,输出流
3、流的角色:文件流(节点流),处理流
从数据来源或操作对象来看,可以这样分:
文件(file)
FileInputStream、FileOutputStream、FileReader、FileWriter
数组([])
- 字节数组(byte[]): ByteArrayInputStream、ByteArrayOutputStream
- 字符数组(char[]): CharArrayReader、CharArrayWriter
管道操作
PipedInputStream、PipedOutputStream、PipedReader、PipedWriter
基本数据类型
DataInputStream、DataOutputStream
缓冲操作
BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
打印
PrintStream、PrintWriter
对象序列化反序列化
ObjectInputStream、ObjectOutputStream
转换
InputStreamReader、OutputStreamWriter
二、一些概念
字节流读取单个字节,用来处理二进制文件(图片、视频等)
字符流读取单个字符,用来处理文本文件(也可以看作特殊的二进制文件);一个字符根据编码不同,存储时需要的字节不同
UTF8中汉字占3个字节,GBK编码中一个汉字是2个字节,这两种编码中英文都占1个字节
编码:就是把字符转换为字节
解码:把字节重新组合为字符
字符集和字符编码
ASCII:美国标准信息交换码,用一个字节的7位表示-------ASCII编码
ISO8859-1:拉丁码表,欧洲码表,用一个字节的8位表示
GB2312:中国的中文编码表,最多2个字节编码所有字符
GBK:中国的中文编码表升级,融合了更多的中文文字符号,最多2个字节编码----GBK编码
Unicode:国际标准码,融合了目前人类使用的所有字符,为每个字符分配唯一的字符码,所有的文字都用2个字节表示---UTF-8/UTF-16/UTF-32编码
UTF-8:变长的编码方式,可用1-4个字节表示一个字符
字符集只规定了有哪些字符,以及这些字符对应的编码值
字符编码是字符集的具体实现方案,规定了字符在计算机如何存储
对象的序列化机制
对象的序列化机制允许把内存中的java对象转换成平台无关的二进制流,从而允许把这种二进制流持久的保存在磁盘上,或通过网络将这种二进制流传输到
另一个网络节点,当其他程序获取了这个二进制流,就可以恢复成原来的java对象
三、流的体系结构
基本的类:
抽象基类 文件流 (节点流) 缓冲流(处理流中的一种)
Reader FileReader (read(char[] charBuf)) BufferedReader (read(char[] charBuf) readLine())
Writer FileWriter (write(char[] charBuf,0,len)) BufferedWriter (write(char[] charBuf,0,len))
InputStream FileInputStream (read(byte[] buffer)) BufferedInputStream (read(byte[] buffer))
OutputStream FileOutputStream (write(byte[] buffer,0,len)) BufferedOutputStream (write(byte[] buffer,0,len))
转换流:和缓冲流一样,是转换流中的一种,属于字符流,提供字符流和字节流之间的转换
InputStreamReader:字节输入流 ——> 字符输入流 ,看不懂的变成看得懂的,解码
OutputStreamWriter:字符输出流 ——> 字节输出流,编码
对象流:
ObjectInputStream:存储中的文件或通过网络接收的数据 ——> 内存中的对象 readObject(),反序列化
ObjectOutputStream:内存中的对象 ——> 存储中的文件或通过网络传输出去,writeObject(),序列化
分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
---|---|---|---|---|
抽象基类 | InputStream | OutputStream | Reader | Writer |
节点流 | FileInputStream | FileOutputStream | FileReader | FileWriter |
访问数组 | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
访问管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
访问字符串 | StringReader | StringWriter | ||
缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
转换流 | InputStreamReader | OutputStreamWriter | ||
对象流 | ObjectInputStream | ObjectOutputStream | ||
特殊流 | DataInputStream | DataOutputStream |
四、常见类的使用
- 磁盘操作: File
- 字节操作: InputStream 和 OutputStream
- 字符操作: Reader 和 Writer
- 对象操作: Serializable
- 网络操作: Socket