Java 使用FileInputStream从文件中读取文本

Java 使用FileInputStream从文件中读取文本,java,file-io,java-io,fileinputstream,Java,File Io,Java Io,Fileinputstream,我的电脑上保存了一个包含abcdefgh内容的文本文件。我想使用FileInputStream在我的控制台上显示字符,同时测量执行此操作所需的时间。看起来是这样的: public class Readtime { public static void main(String args[]) throws Exception{ FileInputStream in=new FileInputStream("bolbol.txt"); while(in.rea

我的电脑上保存了一个包含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次读取操作。我的思维正朝着字符大小的方向发展,而
read()
一次只能读取一个字节,但我什么也做不到

while(in.read()!=-1){
    long startTime =  System.nanoTime();
    int x=in.read();
您正在while条件下读取数据,并再次在循环中打印读取

int i=0;  
while((i=in.read())!=-1){  
    System.out.println((char)i);  
}  
你可以查阅官方文件

您正在while条件下读取数据,并再次在循环中打印读取

int i=0;  
while((i=in.read())!=-1){  
    System.out.println((char)i);  
}  
您可以查看官方文档

更改

while(in.read()!=-1){  

删除

int x=in.read();
你读了两遍。。和打印交替时间。。这就是缺少的字符发生变化的原因

while(in.read()!=-1){  

删除

int x=in.read();
你读了两遍。。和打印交替时间。。这就是为什么每次在.read()中缺少字符的原因;被称为文件的下一个字符被读取。所以每次循环迭代必须读取一个字符

int i=0;  
while((i=in.read())!=-1){  
System.out.println((char)i);
i=in.read();
}
如果您看到输出,那么您将看到您已经读取了备用字符,因为您在循环中读取了两次,一次在while条件中,一次在打印中。

每次在.read()中;被称为文件的下一个字符被读取。所以每次循环迭代必须读取一个字符

int i=0;  
while((i=in.read())!=-1){  
System.out.println((char)i);
i=in.read();
}

如果您看到输出,那么您将看到您已经读取了备用字符,因为您在循环中读取了两次,一次在while条件中,一次在打印中。

您可以使用此选项,它将对您有所帮助

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();
    }
}

你可以用这个,它会帮你的

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();
    }
}

请显示输入和预期输出。文本文件的内容声明为abcdefgh。预期的输出是从a到h的字母以及读取每个字母所需的时间。另外,不要假设每个字节都是字符。只有一些编码才是正确的。以UTF-8为例,这是错误的。使用读取器读取字符。流表示字节。请显示输入和预期输出。文本文件的内容声明为abcdefgh。预期的输出是从a到h的字母以及读取每个字母所需的时间。另外,不要假设每个字节都是字符。只有一些编码才是正确的。以UTF-8为例,这是错误的。使用读取器读取字符。流代表字节。@EJP-我从问题中提取代码来解释错误所在。请阅读全部答案。@EJP-我从问题中提取代码来解释错误所在。请阅读全部答案。