我有一个文本文件,其中包含我的计算机上保存的内容abcdefgh。我想使用FileInputStream来显示控制台上的字符,同时还要测量执行此操作所需的时间。它看起来像这样:
public class Readtime {
public static void main(String args[]) throws Exception{
FileInputStream in=new FileInputStream("bolbol.txt");
while(in.read()!=-1){
long startTime = System.nanoTime();
int x = in.read();
long endtime = System.nanoTime();
System.out.println(endtime-startTime);
System.out.println((char)x);
}
in.close();
}
}
我在控制台上获得的内容如下:
8863
b
7464
d
6998
f
6997
h
现在剩下的字母在哪里?好像只进行了4次读取操作。我的想法是朝着char大小的方向前进,read()
一次只读取一个字节,但我没有到达任何地方。
答案 0 :(得分:5)
while(in.read()!=-1){
long startTime = System.nanoTime();
int x=in.read();
您正在条件下读取数据并再次在循环中打印
int i=0;
while((i=in.read())!=-1){
System.out.println((char)i);
}
您可以查看官方文档here
答案 1 :(得分:2)
更改
while(in.read()!=-1){
到
int x;
while((x=in.read())!=-1){
并删除
int x=in.read();
你正在阅读两次..并打印交替时间......这就是字符丢失的原因
答案 2 :(得分:0)
你可以用它来帮助你
public class Readtime {
public static void main(String args[]) throws Exception{
FileInputStream in=new FileInputStream("bolbol.txt");
long startTime = System.nanoTime();
byte b[]=new byte[in.available()];
fis.read(b);
String readOnConsole=new String(b);
System.out.println(readOnConsole);
long endtime = System.nanoTime();
System.out.println(endtime-startTime);
in.close();
}
}
答案 3 :(得分:-1)
每次in.read();被称为文件的下一个字符被读取。因此,每次循环迭代必须读取一次字符。
int i=0;
while((i=in.read())!=-1){
System.out.println((char)i);
i=in.read();
}
如果你看到你的输出,那么你就会看到你已经读过备用字符了,因为你在循环中读了两次,一次是在条件下,一次是打印。