gpt4 book ai didi

java - 使用 DataInputStream 从文件中读取非常慢

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:56:54 38 4
gpt4 key购买 nike

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

我试过使用下面的代码从文件中读取它,但是它太慢了谁能帮助减少时间?

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

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<Integer> numbersOnLine = new ArrayList<Integer>();
while (fileScanner.hasNextInt()) {
numbersOnLine.add(fileScanner.nextInt());
}
processLineOfNumbers(numbersOnLine);
if (fileScanner.hasNext()) {
fileScanner.next(); // clear the newline
}
}

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

关于java - 使用 DataInputStream 从文件中读取非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3796041/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com