关于“DataInputStream”

nenu0 2003-08-21 04:13:10
为什么以下的代码从文件读出的数据不正确?输入文件格式“112233”。得到的数据值很大,是“12593 12850 13107”。 WHY!!!

public static void main(String[] arguments) {
try {
FileInputStream file = new
FileInputStream("400primes.dat");
BufferedInputStream buff = new
BufferedInputStream(file);
DataInputStream data = new
DataInputStream(buff);

try {
while (true) {
short in = data.readShort();
data.readChar();
System.out.print(in + " ");
}
} catch (EOFException eof) {
buff.close();
}
} catch (IOException e) {
System.out.println("Error -- " + e.toString());
}
}
...全文
105 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cbhyk 2003-08-21
  • 打赏
  • 举报
回复
就是这样
先原谅自己 2003-08-21
  • 打赏
  • 举报
回复
是不是因为 。DAT文件中的数使用ACSII码输入的。
而每个ACSII码在计算机里站一个字节
readShort();要读16位即2个字节 1的ACSII为31(16进制)
所以读入的是3131(16进制)的数
而十进制数12593就是16进制数3131
不知道我理解的对否?
cbhyk 2003-08-21
  • 打赏
  • 举报
回复
readShort();是按十六进制读的,"112233"的十六进制是31 31 32 32 33 33,转成short就是12593 12850 13107
nenu0 2003-08-21
  • 打赏
  • 举报
回复
public static void main(String[] arguments) {
try {
FileInputStream file = new FileInputStream("400primes.dat");
BufferedInputStream buff = new BufferedInputStream(file);
DataInputStream data = new DataInputStream(buff);
try {
while (true) { short in = data.readShort(); System.out.print(in + " ");
}
}
catch (EOFException eof) {
buff.close();
}
}
catch (IOException e) {
System.out.println("Error -- " + e.toString());
}
}

62,614

社区成员

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

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