关于Java问题?

如图,为什么说这是二进制写入,求解,谢谢大佬!... 如图,为什么说这是二进制写入,求解,谢谢大佬! 展开
 我来答
绝杀狂龙
2021-02-06 · TA获得超过1913个赞
知道小有建树答主
回答量:1310
采纳率:78%
帮助的人:598万
展开全部

二进制写入?听谁说的?

IO的话就字节流和字符流两种方式

这里就是将byte类型的数组元素以字节流的方式写入test.txt文件里,数组中的元素对应ASCII码

然后再通过字节流的方式读取

至于读取会出现乱码是因为

在ASCII码表中,前32个字符是不能用于打印的编码,而是用于控制像打印机一样的外围设备。所以打印出来看起来这样的乱码


如果是读取占用一个字节的字符显示的话问题不是太大。


但如果涉及到中文(等需要多个字节表示的字符)使用字节流读取显示就会有乱码的问题

例如 “中” 假定一个中文占用2个字节的话

字节流一个字节一个字节的读取,本来“中”是两个字节表示的,但字节流读一个显示一个,就造成原本“中”这个字被分成两半读取,显示出来的肯定就不对咯

追问
教程上这样写的,我也不清楚啊
微温stone
2021-02-06
知道答主
回答量:32
采纳率:66%
帮助的人:6.2万
展开全部
理论上来说,这个确实是二进制写入,
由于你程序写入时用到的OutputStream,它是一个字节流,这种以Stream结尾的流都是字节流,因此程序每次调用write()方法都是输出一个字节。
那这里就产生了一个问题,字节和二进制是什么关系?疯狂java讲义一书把这个问题讲得很透彻,我这里随便说一说:现代操作系统无论是分配内存、还是分配文件,都是用字节(Byte为最小单位的,你几乎找不到任何地方用位(bit作为单位(除了你家里的带宽),因此计算机里最小的文件至少也要有1个Byte,它不可能是一个bit。
前面说了,你的程序用的OutputStream的write方法,它每次输出一个Byte,一个Byte等于8个bit,因此也就是输出8个”010101“的二进制码。

至于你读取出来是乱码,这只是字符集的问题,要不然你试试把程序中数组元素改为97、98、99、100,虽然程序依然用二进制方式写入。
程序读取时也用二进制方式读取,因为你读取程序用的也是InputStream(它也是字节流),它每次读取一个字节(8个二进制码),比如你第一次读取的二进制码代表97,程序将它强转为char时,它就会显示字符 a。
说句实话,像你扣Java扣这么细节的内容,我觉得只有疯狂java讲义这种书才帮得了你。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友12ee0fd
2021-02-06 · TA获得超过4.7万个赞
知道大有可为答主
回答量:1.1万
采纳率:66%
帮助的人:1962万
展开全部
stream是按字节写,writer是按字符写
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式