langmanweixin 2016-10-14 08:35 采纳率: 14.3%
浏览 915

FileReader 的问题 请大神帮我看看

问题1:

有一个txt文件,文件中装着两个汉字“我是”。

/*
haha.txt

我是

*/
11111111-11111111-11100011-10011111-
这个是文档的二进制表现形式。

我的理解:
haha.txt这个文件中装着一堆二进制数据,之所以这些二进制数能显示出“我是”这两个字,是因为在用TXT这个打开这堆二进制的数据时,TXT引用了windos中的编码表,将这堆二进制数拿着表中去查,查完之后转换成汉字,在屏幕中显示。

FileReader fr = new FileReader("haha.txt");
FileWriter wr = new FileWriter("hehe.txt");

while((len=fr.read())!=-1)
{
wr.write(len);
}

我的理解:
在这个例子当中,当调用fr.read()这个函数时,函数获取了-11111111-11111111-,然后通过查表发现,这个16为的二进制代表汉字“我”,然后就将“我”的16位二进制值
-11111111-11111111-赋给了len,

当wr.write(len)启用时,len所指向的二进制书,被写入了“hehe.txt”中。

结论1:read()函数表面上是在读“我”,实际上是在读"我"背后的二进制数,
结论2:read()函数并没有把从硬盘中读取的一组二进制数,直接赋值给len,而是在字符集中找了一组二进制数,赋值给Len。

问题2:

FileReader fr = new FileReader("1.jpg");
FileWriter wr = new FileWriter("2.jpg");

有一张图片,1.jpg, 这张图片在硬盘当中是一堆二进制数,
11111111-11111111-11100011-10011111-1110011-11100000-...............

现在有一个复制图片的类:
while((len=fr.read())!=-1)
{
wr.write(len);
}

当read()方法第一次被调用时,函数获取了-11111111-11111111-,函数就开始查表,查表时发现-11111111-11111111-在字符集中没有所对应的字符,底层就启动模糊查找,发现,-11111111-11111110-,这个16位的二进制数,有一个对应的字符,因为-11111111-11111110-和-11111111-11111111-很相似,然后系统就把-11111111-11111110-的值赋给了len,

这时len中就是-11111111-11111110-这个16位的二进制。然后再通过write写入到2.jpg当中。
当函数等于-1,执行完毕时。
2.jpg当中就是一堆二进制数,因为编码发生了变化,所有2.JPG就有可能打不开。

请问下,上面的理解有没有错误的地方

  • 写回答

1条回答 默认 最新

  • devmiao 2016-10-23 15:34
    关注
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!