输出问题,帮忙解释一行代码?

chjmars31728 2009-08-08 10:26:05
import java.io.*;

public class TestFileInputStream {
public static void main(String[] args) {
int b = 0;

FileInputStream in = null;

try{
in = new FileInputStream("E:\\Myjava\\io\\TestTransfrom2.java");

} catch(FileNotFoundException fe) {
System.out.println("没有找到相应的文件!");
System.exit(-1);
}
try{
long num = 0;
while((b=in.read()) != -1) {
System.out.print((char)in.read());
num ++;
}
in.close();
System.out.println();
System.out.println("共读取了:" + num + "个字节!");
} catch (IOException e) {
System.out.println("文件读取错误!");
System.exit(-1);
}
}
}


输出:
pbi ls etrnfo2{
pbi ttcvi anSrn[ r){
nuSraRae u;
u e nuSraRae(
Sse.u.rn(ca)u.ed);\rnfo.x")
}
Sse.u.rnl(;
u.ls(;cdn()
ac FlNtonEcpinf){
f.rnSakrc(;
Sse.u.rnl(??????";
.rnSakrc(;
ty{
e ienuSra(E\Mjv\i\TsTasrm.aa);
wieotra( =-){
ytmotpitnotgtnoig);
}cth(Oxeto ){pitn"??????)
}pittcTae)
}
?
共读取了:499个字节!

但是将System.out.print((char)in.read());改为System.out.print((char)b)后输出正常
我不知道是怎么回事,请帮忙解释解释,谢谢!
...全文
162 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chjmars31728 2009-08-08
  • 打赏
  • 举报
回复
谢谢各位的指点,搞懂了!
samihyypia 2009-08-08
  • 打赏
  • 举报
回复
查下api仔细看看
bigbug9002 2009-08-08
  • 打赏
  • 举报
回复
呵呵,读了两次,只输出一次。和下跳棋的意思差不多了。
gesanri 2009-08-08
  • 打赏
  • 举报
回复
你在循环条件的时候已经读过一次了 while((b=in.read()) != -1)
你在循环体里又读一次System.out.print((char)in.read()),相当于读了2个字符,而打印了第2个字符,第1个字符你没打印,你没发现你改之前和改之后正好读取的字节数差了一倍吗
chenliuyang 2009-08-08
  • 打赏
  • 举报
回复
while((b=in.read()) != -1) {
System.out.print((char)in.read());
num ++;
}

b=in.read();你读过一次,指针向下走一位,
(char)in.read(); 如果有这么个字符 "ab" 循环一次就打一个 b 出来

62,621

社区成员

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

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