3个回答
展开全部
二进制写入?听谁说的?
IO的话就字节流和字符流两种方式
这里就是将byte类型的数组元素以字节流的方式写入test.txt文件里,数组中的元素对应ASCII码
然后再通过字节流的方式读取
至于读取会出现乱码是因为
在ASCII码表中,前32个字符是不能用于打印的编码,而是用于控制像打印机一样的外围设备。所以打印出来看起来这样的乱码
如果是读取占用一个字节的字符显示的话问题不是太大。
但如果涉及到中文(等需要多个字节表示的字符)使用字节流读取显示就会有乱码的问题
例如 “中” 假定一个中文占用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讲义这种书才帮得了你。
由于你程序写入时用到的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讲义这种书才帮得了你。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
stream是按字节写,writer是按字符写
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询