inputstream类的read方法返回值代表什么意思?

xiaobineric 2008-04-28 03:39:51
教程上说read返回的是整形数据,可是这个数据代表什么意思呢?

import java.io.*;
public class FileApp {
public static void main(String[] args){
byte[] buffer=new byte[2056];
try{
FileInputStream fileIn = new FileInputStream("1.txt");
int bytes=fileIn.read();
System.out.println(bytes);
}
catch (Exception e){
System.out.println(e);
}
}
}

结果得到的是49。
说明:1.txt的内容是“12345678”
...全文
1425 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaobineric 2008-04-28
  • 打赏
  • 举报
回复
刚才又试了一下,把1.txt改为“abc12345678”,编码方式改为unicode,未强制转化返回255
看来read返回值和文件的编码方式有关系。各位能否也试试,看看我的猜想是否正确?
云上飞翔 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 anqini 的回复:]
引用 6 楼 anqini 的回复:
引用 1 楼 ZhMilo 的回复:
返回的是asc码,0-128的整数,你可以通过char强制转换成字符型的。

补充一下,应该是0-128的整数,你是没考虑文本文件里是中文汉字的时候.

写错..抱歉,一个汉字是2个字节组成的,虽然范围的是整数,但不只是这个范围。
GB2312中汉字的编码范围为,第一字节0xB0-0xF7(对应十进制为176-247),第二个字节0xA0-0xFE(对应十进制为160-254)。所以中文的时候是根asc码…
[/Quote]
答:说得对。实际上返回的汉字的机内码。如:汉字'啊',排在16区1位,这是机内码,各加160得到机内码:176 161。这就是你读出的两个字节。当然,现在的默认字节编码是GBK,向下兼容GB2312。准确说:读出的是GBK的字节编码。而GBK中,前128正是标准的ASCII码表。这是为什么英文字符读出来就是ASCII的原因。
若是字节文件,直接读出其中的字节。流结束是-1.
anqini 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 anqini 的回复:]
引用 1 楼 ZhMilo 的回复:
返回的是asc码,0-128的整数,你可以通过char强制转换成字符型的。

补充一下,应该是0-128的整数,你是没考虑文本文件里是中文汉字的时候.
[/Quote]
写错..抱歉,一个汉字是2个字节组成的,虽然范围的是整数,但不只是这个范围。
GB2312中汉字的编码范围为,第一字节0xB0-0xF7(对应十进制为176-247),第二个字节0xA0-0xFE(对应十进制为160-254)。所以中文的时候是根asc码没关系。
milo-higgs 2008-04-28
  • 打赏
  • 举报
回复
返回的也不是0-128的整数了(补充一下)
milo-higgs 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 anqini 的回复:]
引用 1 楼 ZhMilo 的回复:
返回的是asc码,0-128的整数,你可以通过char强制转换成字符型的。

补充一下,应该是0-128的整数,你是没考虑文本文件里是中文汉字的时候.
[/Quote]

是这样的,如果是中文的话,char转换就不会正常显示了。
anqini 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ZhMilo 的回复:]
返回的是asc码,0-128的整数,你可以通过char强制转换成字符型的。
[/Quote]
补充一下,应该是0-128的整数,你是没考虑文本文件里是中文汉字的时候.
xiaobineric 2008-04-28
  • 打赏
  • 举报
回复
回3楼
刚才把1.txt的内容改为“哈哈12345678”,经强制转换后,结果返回的是“?”不强制转换返回185,显然不是ASCII码。
还是搞不懂。
xiaobineric 2008-04-28
  • 打赏
  • 举报
回复
1楼说的没错。
可是如果读取的不是文本文件,而是二进制文件,那又是什么意思呢?
云上飞翔 2008-04-28
  • 打赏
  • 举报
回复
答:不见得。若"1.txt"中放的是汉字呢?难道返回的是汉字的ascii码?此时用1楼的“char强制转换成字符型难道可以吗?
wenzheng38 2008-04-28
  • 打赏
  • 举报
回复
楼上的正解,返回的是ASCII码值
楼上的好快哟
milo-higgs 2008-04-28
  • 打赏
  • 举报
回复
返回的是asc码,0-128的整数,你可以通过char强制转换成字符型的。

62,614

社区成员

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

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