【Java篇】有关字节、字符流的知识你还记得吗?

目录

字节流

字符流

字节流和字符流的区别


字节流

InputStream / OutputStream

        字节流是以字节为单位进行读取的数据流。常用来处理二进制数据的输入输出,如键盘输入、网络通信。但字节流不能正确显示 Unicode 字符。

输入流

InputStream in = new InputStream(socket.getIntputStream());        // 创建输入对象
int len = in.available();                                          // 读取输入对象长度
char c = (char)in.read();                                          // 读取输入字节
byte[] b = new byte[len];                                          // 连续读取输入字节
in.read(b);
in.close();                                                        // 关闭输入对象

输出流

OutputStream out = new OutputStream(socket.getOutputStream());     // 创建输出对象
byte[] b = {1,2,3};                                                // 导入输出字节          
out.write(b);
out.flush();                                                       // 刷新输出对象,输出字节
out.close();                                                       // 关闭输出对象,输出字节

字符流

Reader / Writer

        字符流是以字符为单位进行读取的数据流。只能用于处理文本数据。且所有文本数据,即经过 Unicode 编码的数据都必须以字符流的形式呈现。

我们在 Java 程序中处理数据往往需要用到字符流,但在通信中却需要使用字节流。这就需要进行数据格式转化。

InputStreamReader

        Reader 类子类。将字节流数据转换成字符流,常用于读取控制台输入或读取网络通信。可指定编码方式,否则使用 IDE 默认编码方式。

// 读取键盘输入
InputStreamReader in = new InputStreamReader(System.in);
// 读取套接字通信,并指定编码格式
InputStreamReader in = new InputStreamReader(socket.getInputStream(), "UTF-8");

OutputStreamWriter 类 

        Writer 类子类。将字符流数据转换成字节流,常用于发送网络通信。

// 数据转化为字节流发送
OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());

字节流和字符流的区别

1.两者的组成不同:(这也直接影响我们后面读取数据时的方式不同)

                字节流的组成:字节流是由字节组成的。
                字符流的组成:字符流是由字符组成的。
2.计算机对两者的处理方式不同:

                字节流:主要用在处理二进制数据,它是按字节来处理的但实际中很多的数据是文本。
                字符流:按虚拟机的encode来处理,也就是要进行字符集的转化。

注:Java里字符由两个字节组成. 1字符=2字节

        实际上 我们可以理解为字符流=字节流+编码表,为什么可以这样理解呢,因为字节流读数据是默认采用了ASCII编码,而ASCll编码是主要针对一个字节代表一个字符的数据,而我们中文汉字是一个字符=两个字节,如果采用了ASCll编码读取汉字就会出现乱码,在字节流中我们没有办法改变采用其他编码种类,而字符流可以,它采用好似UTF编码,是支持中文的,我们还可以在字符流对象中设置采用别的编码种类,字符流就是在字节流的基础上增加了可以选择其他编码种类的功能。

猜你喜欢

转载自blog.csdn.net/m0_64231944/article/details/127977046
今日推荐