黑马程序员-字节流,转换流,标准输入输出流

来源:互联网 发布:彩票中奖查询软件 编辑:程序博客网 时间:2024/06/11 04:56
---------------------- android培训、java培训、期待与您交流! ----------------------

一.字节流
 1.什么是字节流
  是IO流中的一种, 可以用来读写字节数据.
 2.字节流和字符流的区别
  计算机中存储任何数据都是以字节的形式, 所以字节流可以读写任意类型的数据.
  在读写的数据是字符的时候, 用字符流更方便.
 3.什么时候用字节流, 什么时候用字符流
  当从一个文本文件中读取数据, 在程序中当作字符使用时, 或者写出一段字符数据到文件中时, 使用字符流比较方便.
   字符流读取数据就是字符, 字符流可以直接写出字符
  如果只是读写数据, 不转为字符, 那么就都可以使用字节流.
 4.read()方法为什么返回int 
  Reader.read() 读取一个字符, 返回int
  InputStream.read() 读取一个字节, 返回int
  为什么不是返回char和byte呢?
  Reader.read() 如果返回char, 那么无法表示流末尾, 因为所有的char都有可能在流中出现.
   在read方法内部, 将读取到的char装入int, 这时正常数据不受影响, 强转回char之后直接使用, 也可以返回-1代表流末尾了.
  InputStream.read() 如果返回byte, 也是无法表示流末尾的, 因为从-128到127中所有值都有可能在流中出现.
   在read方法内部, 是将读取到的字节&255, 正数没有任何变化, 负数转为了正数, 这时就可以用-1表示文件末尾了
   在真正使用数据时, 只要将转换后的数强转回byte即可
 5.使用字节流拷贝文件
  使用FileInputStream和FileOutputStream, 逐个字节拷贝. 效率很低, 不推荐.
  * 使用FileInputStream和FileOutputStream, 定义数组作为缓冲区, 一次读取一个数组, 一次写出一个数组, 提高效率.
  * 使用BufferedInputStream和BufferedOutputStream, 逐个字节拷贝, 但其内部使用了缓冲机制, 速度较快.  

二.转换流
 * 1.InputStreamReader
  当获取了一个字节输入流, 希望从中读取字符数据时, 可以把字节输入流转为字符输入流InputStreamReader
  当读取非平台默认编码的字符文件时, FileReader做不到, 只能使用InputStreamReader.
 * 2.OutputStreamWriter
  当获取了一个字节输出流, 希望向外写出字符数据时, 可以把字节输出流转为字符输出流OutputStreamWriter
  当写出非平台默认编码的字符文件时, FileWriter做不到, 只能使用OutputStreamWriter

三.标准输入输出流
 1.System.in
  标准输入流, InputStream, 可以从键盘输入读取字节.
  可以使用System.setIn(InputStream)改变标准输入流的数据源.
 2.System.out
  标准输出流, PrintStream, 可以向屏幕输出数据.
  可以使用System.setOut(PrintStream)改变标准输出流的数据目的地.

---------------------- android培训、java培训、期待与您交流! ----------------------
原创粉丝点击