字符流中read方法返回值是int,为什么输出是char?

Quester-King 2012-03-19 05:10:51
字符流中read方法返回值是int,当我从文本中读取是,返回int值,到末尾返回-1

可是为什么我把读入的数据再输出到另一个文本中还是char?

比如A的内容:
java练习

那把A读入在输出到B,B的内容还是:
java练习

为什么B的内容不是一串数字??
...全文
522 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
beiouwolf 2012-03-20
  • 打赏
  • 举报
回复
Reader接口和Stream接口的区别只是一个以byte为基准,一个以char为基准而已
stream返回的是单个byte
reader返回的是单个char
reader只是帮你组织了byte[]到char的过程
接口意义上来说 是一样的
Quester-King 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 abstruct 的回复:]

read的时候那read读取的就是一个char,但是char有对应assic码,而read的时候都会把char转成对象应assic码,所以也就是int型的了,而在写的时候也会还原成原来的char。
如果你直接打印那么就是该char的assic码了。
[/Quote]
非常感谢,我自己看了源代码,看了注释,加上你们的解释,差不多懂了。!谢谢!
安特矮油 2012-03-20
  • 打赏
  • 举报
回复
read的时候那read读取的就是一个char,但是char有对应assic码,而read的时候都会把char转成对象应assic码,所以也就是int型的了,而在写的时候也会还原成原来的char。
如果你直接打印那么就是该char的assic码了。
Quester-King 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jiakai0419 的回复:]

简单来说
当你的I/O流读文件的时候,文件里面的内容被编码成二进制字节序列。

然后你又把你读到的二进制字节序列,原样不动的输出到文件中。

文件按照刚才编码的字符集,又把二进制字节流解码成了字符。

这就是上面的简单过程。
[/Quote]
我是比较疑惑字符流中的read方法,而不是字节流的。
Quester-King 2012-03-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 beiouwolf 的回复:]

这个你得先去好好学学IO基础
不知道你的具体环境和代码,简单的假设一下
你用的InputStream和OutputStream
read方法有2种,一种是每次读取一个字节的read()方法,这个方法返回的是读取到的当前字节数据
一种是读取n个字节,放入byte[]缓冲区的双缓冲读写,返回的是读取到的字节长度
估计你用的是非缓冲的单字节读取,那么你读取完以后,用os输出时,同样是作为字节……
[/Quote]
可是我是说字符流中Reader的read方法,不是以字节为单位的字节流啊
jiakai0419 2012-03-19
  • 打赏
  • 举报
回复
简单来说
当你的I/O流读文件的时候,文件里面的内容被编码成二进制字节序列。

然后你又把你读到的二进制字节序列,原样不动的输出到文件中。

文件按照刚才编码的字符集,又把二进制字节流解码成了字符。

这就是上面的简单过程。

beiouwolf 2012-03-19
  • 打赏
  • 举报
回复
这个你得先去好好学学IO基础
不知道你的具体环境和代码,简单的假设一下
你用的InputStream和OutputStream
read方法有2种,一种是每次读取一个字节的read()方法,这个方法返回的是读取到的当前字节数据
一种是读取n个字节,放入byte[]缓冲区的双缓冲读写,返回的是读取到的字节长度
估计你用的是非缓冲的单字节读取,那么你读取完以后,用os输出时,同样是作为字节数据输出的,所以两者内容当然一样

至于你说的为什么不是一串数字...这个...字节是字节,字节不等于字符串,任何数据的底层都是字节,为什么你会得出写到B的内容是一串数字这个结论

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧