黑马程序员技术交流社区

标题: FileOutputStream的write方法是写入int类型的最后8位? [打印本页]

作者: kevinmesss.tz    时间: 2014-3-1 14:17
标题: FileOutputStream的write方法是写入int类型的最后8位?
本帖最后由 kevinmesss.tz 于 2014-3-13 13:27 编辑

write(5);写到记事本里面变成一个符号了
5是int类型的,它的后8位不是0000 0101吗
为什么数字也会出现乱码

QQ截图20140301141130.png (146.17 KB, 下载次数: 54)

源码

源码

QQ截图20140301141148.png (8.38 KB, 下载次数: 54)

运行结果

运行结果

作者: kevinmesss.tz    时间: 2014-3-1 14:20
运行结果第一行是个 |线
然后我写了一个FileInputStream关联这个文件读取出来的是乱码

为什么会这样?

QQ截图20140301141949.png (2.41 KB, 下载次数: 48)

QQ截图20140301141949.png

作者: 年少丶    时间: 2014-3-1 20:13
记事本解析错误,你换个编辑器试试
作者: kevinmesss.tz    时间: 2014-3-2 06:22
年少丶 发表于 2014-3-1 20:13
记事本解析错误,你换个编辑器试试

试过了 我换成UE也是这个样子
这不是中文 记事本不会解析错吧
作者: q527198615    时间: 2014-3-2 20:35
能把源码不用图片贴出来吗?这样不好给你调试
作者: kevinmesss.tz    时间: 2014-3-3 09:14
q527198615 发表于 2014-3-2 20:35
能把源码不用图片贴出来吗?这样不好给你调试

那种可以复制图片中的内容的格式不会贴。。我把源码上传吧

Byte1_FileOutputStreamDemo.rar

683 Bytes, 下载次数: 111


作者: 水蓝    时间: 2014-3-13 09:19
本帖最后由 水蓝 于 2014-3-13 09:22 编辑

我这边用Noptepad++看了一下输出的fos.txt。如下图:



给楼主分析一下原因吧。

首先,FileOutputStream的write方法是逐个字节向文件中输出。
下面是你代码中5次调用write方法写入的字节码:(后面的括号为注释)
5(这个就是传说中的'ENQ',上图有红色圈圈出)
13,10(这个是换行符)
104, 101, 108, 108, 111, 32, 106, 97, 118, 97(这个是“hello java”)
13,10(这个是换行符)
108, 108, 111, 32, 106(这个是你从“hello java”字符串中,从下标2开始,向后截取5个字节后的输出)

关于为什么写入5是‘ENQ’,我们可以参考一下ASCII码表:
如下图所示,ASCII码表中的值为5的位置,就是‘ENQ’的意思


最后,建议楼主以后在查看程序输出文件时,少用记事本。建议用(UE,或者Notepad++)








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2