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
posted @ 2022-11-14 22:56  鼠标的博客  阅读(24)  评论(0编辑  收藏  举报