【Java篇】有关字节、字符流的知识你还记得吗?
admin
2024-02-08 03:35:38
0

目录

字节流

字符流

字节流和字符流的区别


字节流

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编码,是支持中文的,我们还可以在字符流对象中设置采用别的编码种类,字符流就是在字节流的基础上增加了可以选择其他编码种类的功能。

相关内容

热门资讯

我来教大家“掼蛋大师辅助器ap... 亲,掼蛋大师这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,掼蛋大师的开挂软件,名...
我来教大家“开心联盟辅助器ap... 您好,开心联盟这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
我来教大家“友愉棋牌辅助器ap... 您好,友愉棋牌这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
我来教大家“全盛棋牌辅助器ap... 亲,全盛棋牌这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,全盛棋牌的开挂软件,名...
我来教大家“情怀三三麻将辅助器... 我来教大家“情怀三三麻将辅助器app官方下载最新版本更新”详细分享开挂一、情怀三三麻将AI软件牌型概...
我来教大家“无锡好运麻将辅助器... 亲,无锡好运麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,无锡好运麻将的开挂...
我来教大家“推筒子辅助器app... 您好,推筒子这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打牌...
我来教大家“比奇堡辅助器app... 我来教大家“比奇堡辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方神...
我来教大家“新兴茶苑辅助器ap... 我来教大家“新兴茶苑辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方...
我来教大家“欢乐互动辅助器ap... 我来教大家“欢乐互动辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方...
我来教大家“东方互娱辅助器ap... 亲,东方互娱这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,东方互娱的开挂软件,名...
我来教大家“天天乐清麻将辅助器... 我来教大家“天天乐清麻将辅助器app官方下载最新版本更新”详细分享开挂一、天天乐清麻将AI软件牌型概...
我来教大家“唐三彩辅助器app... 我来教大家“唐三彩辅助器app官方下载最新版本更新”详细分享开挂一、唐三彩AI软件牌型概率发牌机制”...
我来教大家“Y0辅助器app官... 我来教大家“Y0辅助器app官方下载最新版本更新”详细分享开挂一、Y0AI软件牌型概率发牌机制”必胜...
我来教大家“天天互娱辅助器ap... 亲,天天互娱这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,天天互娱的开挂软件,名...
我来教大家“悟空竞技麻将辅助器... 亲,悟空竞技麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,悟空竞技麻将的开挂...
我来教大家“情怀开化麻将辅助器... 我来教大家“情怀开化麻将辅助器app官方下载最新版本更新”详细分享开挂一、情怀开化麻将AI软件牌型概...
我来教大家“龙炎互娱辅助器ap... 我来教大家“龙炎互娱辅助器app官方下载最新版本更新”详细分享开挂一、龙炎互娱AI软件牌型概率发牌机...
我来教大家“闲逸碰胡辅助器ap... 亲,闲逸碰胡这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,闲逸碰胡的开挂软件,名...
我来教大家“友聚麻将辅助器ap... 我来教大家“友聚麻将辅助器app官方下载最新版本更新”详细分享开挂一、友聚麻将AI软件牌型概率发牌机...