IO流
(抽象基类) | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
字节流:适合操作文件,如图片、声音、视频(按字节一个一个读取)
字符流:适合操作文本(按字符读取)
根据实现类的后缀可以看出属于字节流还是字符流,如FileInputStream和FileReader
常用节点流
操作文件:FileInputStream、FileOutputStream
操作文件中的字符:FileReader、FileWriter(父类分别为InputStreamReader和OutputStreamWriter)
(字符输出流需要使用flush()刷新)
处理流(包装流)
需要传入节点流,在节点流之上提供更强大的功能
操作文件:BufferedInputStream、BufferedOutputStream
操作文件中的字符:BufferedReader、BufferedWriter
转换流
把一种字节流转换为字符流 可以指定编码:
常用:InputStreamReader、OutputStreamReader
存在编码问题时:
// 把字节流FileInputStream转换为字符流InputStreamReader
InputStreamReader isr = new InputStreamReader (new FileInputStream(filePath),"gbk");
// 按需要包装到处理流(包装流)BufferedReader中
BufferedReader br = new BufferedReader (isr);
在网络编程时:
// 把字节流socket.getInputStream()转换为字符流InputStreamReader
InputStreamReader isr = new InputStreamReader (socket.getInputStream());
// 按需要包装到处理流(包装流)BufferedReader中
BufferedReader br = new BufferedReader (isr);
在网络编程中的应用
socket连接:
-
服务端
服务端 -
客户端
客户端
客户端发送(文本)信息给服务端:
1. 字节流
-
服务端
服务端 -
客户端
客户端 -
结果
服务端结果
2. 字符流
-
服务端
服务端 -
客户端
客户端 -
结果
服务端结果
客户端从本地读取文件发送给服务端:
-
工具方法
image.png -
服务端
服务端
-
客户端
客户端
-
结果
image.png
image.png
最后就是一定要记得关闭资源
字节流使用socket.shutdownOut
字符流记得使用newLine()作为结束标记 以及使用flush()刷新
网友评论