JAVA中字节流和字符流的区别

流分类:


1. Java的字节流

  • InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。

2. Java的字符流

  • Reader是所有读取字符串输入流的祖先,而Writer是所有输出字符串的祖先。

InputStream,OutputStream,Reader,Writer都是抽象类。所以不能直接new

字节流是最基本的,所有的InputStreamOutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的,
但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化,
这两个之间通过InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联,
在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的

在从字节流转化为字符流时,实际上就是byte[]转化为String时,
public String(byte bytes[], String charsetName)
有一个关键的参数字符集编码,通常我们都省略了,那系统就用操作系统的lang
而在字符流转化为字节流时,实际上是String转化为byte[]时,
byte[] String.getBytes(String charsetName)
也是一样的道理

至于java.io中还出现了许多其他的流,按主要是为了提高性能和使用方便,
如BufferedInputStream,PipedInputStream等

Reader                   InputStream
  ├BufferedReader             ├StringBufferInputStream
  │    └LineNumberReader      ├ObjectInputStream
  ├CharArrayReader            ├ByteArrayInputStream
  ├InputStreamReader          ├InputStream
  │    └FileReader            ├FileInputStream
  ├FilterReader               ├FilterInputStream
  │    └PushbackReader        ├AudioInputStream
  ├PipedReader                ├PipedInputStream
  └StringReader               └SequenceInputStream
   
  Write                  OutputStream
  ├BufferedWriter             ├BufferedOutputStream
  ├CharArrayWriter            ├ObjectOutputStream
  ├OutputStreamWriter         ├ByteArrayOutputStream
  │    └FileWriter            ├FileOutputStream
  ├FilterWriter               ├FilterOutputStream
  ├PrintWriter                │    └PrintStream
  ├PipedWriter                └PipedOutputStream
  └StringWriter               

你可能感兴趣的:(JAVA中字节流和字符流的区别)