输入流输出流区分、文件读取乱码及爬虫读取文件原理

一.输入流输出流方向判断

二.乱码原因

  1. 字节数不够:通过字节流逐个读取字符集,字符集中包含中文
  • 表现:汉字显示不全
  1. 字符集不统一:源文件和转换后的文件编码解码格式需统一
  • 表现:不能正确显示汉字

三.流分类介绍

  1. 字节流(InputStream,OutputStream)
  • 实现类:FileInputStream,FileOutputStream
  1. 字符流(Reader,Writer)
  • 实现类:FileReader,FileWriter
  1. 其他流
  • 转换流:InputStreamReader,OutputStreamWriter
    作用:通过装饰流输入流-->输出流
  • 装饰流
    • BufferedInputStream,BufferOutputStream
      • 作用:修饰字节流,提高运行效率
    • BufferedReader,BufferedWriter
      • 作用:修饰字符流,提高运行效率
      • 若想修饰字符流的装饰流(BufferedReader,BufferedWriter)修饰字节流需要通过转换流
  • 打印流:PrintStream,PrintWriter
    • 区别:PrintWriter属于字符流,需要通过flush()刷新管道
    • 作用:将对象格式打印到文本输出流,简言之,输出一段文本。
    • 重点:字节流转换成字符流多用输出流而非转换流
  • 对象流:ObjectInputStream,ObjectOutputStream
    • 作用:本地文件中传输、存储对象,网络传输中传输对象
    • 前提:被传输的对象需实现序列化接口

参考链接:https://www.cnblogs.com/ly411/p/14675416.html

四.测试(输入内容中英混合)

3.1 字节流写入,字节流读取

  • 程序截图

3.2 字符流写入,字符流读取

  • 程序截图

3.3 字节流写入,字符流读取

  • 程序截图

3.4 字符流写入,字节流读取

  • 程序截图

3.5 装修流写入读取,爬虫原理

  • 根据不同的输入流,选择不同的装饰流
  • 程序截图

五.总结

  • 根据输入源选择字节流或字符流
    • 传输内容为文本且中英混合,选择缓冲字符输入流按行读取,输出流任意
    • 传输内容为图片等二进制文件,用字节输出流写入,字节输入流读取
  • 流传输尽量用装饰流装饰,提高效率
  • 打印流输出内容不用装饰流,因为效率提高不明显。

附上本地文件和socket网络编程常用的流

posted @ 2021-04-19 11:22  芥纳须弥  阅读(443)  评论(0)    收藏  举报