使用DataInputStream从文件读取非常慢

我有一个包含大量数字的文件。

我曾尝试使用以下代码从文件中读取它,但它是超级慢任何人都可以帮助减少时间?

以下是我的代码以非常慢的方式阅读它:

import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.*; public class FileInput { public static void main(String[] args) { Scanner scan1 = new Scanner(System.in); String filename = scan1.nextLine(); File file = new File(filename); FileInputStream fis = null; BufferedInputStream bis = null; DataInputStream dis = null; try { fis = new FileInputStream(file); bis = new BufferedInputStream(fis); dis = new DataInputStream(bis); while (dis.available() != 0) { System.out.println(dis.readLine()); } fis.close(); bis.close(); dis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 

不要使用DataInputStream从文件中读取行。 而是使用BufferedReader ,如:

 fis = new FileInputStream(file); BufferedReader reader = new BufferedReader(new InputStreamReader(fis)); while ((String line = reader.readLine()) != null) { System.out.println(line); } 

DataInputStream.readLine上的javadoc告诉您不要使用该方法。 (它已被弃用)

当然,当你真正开始阅读这些数字时,我会鼓励你忘记自己阅读这些行,然后让Scanner为你读取这些数字。 如果您需要知道哪些数字在同一行, Scanner也可以为您执行此操作:

 Scanner fileScanner = new Scanner(file, "UTF-8").useDelimiter(" +| *(?=\\n)|(?<=\\n) *"); while (fileScanner.hasNext()) { List numbersOnLine = new ArrayList(); while (fileScanner.hasNextInt()) { numbersOnLine.add(fileScanner.nextInt()); } processLineOfNumbers(numbersOnLine); if (fileScanner.hasNext()) { fileScanner.next(); // clear the newline } } 

那个花哨的正则表达式使得行之间的换行符也显示为Scanner标记。

在我的机器上运行得更快,println被注释掉了。 写入屏幕可以减慢很多事情。 这不仅仅是一件Java事情……发生在C / C ++和我曾经使用的其他语言中。

 import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Scanner; public class file { public static void main(String[] args){ Scanner keyboard = new Scanner(System.in); String fname = ""; System.out.print("File Name: "); fname = keyboard.next(); try{ Scanner file1 = new Scanner(new FileReader(fname)); System.out.println("File Open Successful"); int length = file1.nextInt(); String[] content = new String[length]; for (int i=0;i 

}