我正在尝试读取一个包含大约1000个非常长的行的文本文件。整个文件大小约为1.4MB。我正在使用BufferedReader的readLine方法读取文件。在控制台上打印输出需要8-10秒。我用php的fgets尝试了同样的方法,它一眨眼的功夫就打印出了所有相同的行!这怎么可能呢?下面是我使用的代码
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ClickLogDataImporter {
public static void main(String [] args) {
try {
new ClickLogDataImporter().getFileData();
} catch (Exception ex) {
Logger.getLogger(ClickLogDataImporter.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void getFileData() throws FileNotFoundException, IOException {
String path = "/home/shantanu/Documents";
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(path+"/sample.txt")));
String line = "";
while((line = (br.readLine())) != null) {
System.out.println(line);
}
}
}PHP代码
<?php
$fileName = "/home/shantanu/Documents/sample.txt";
$file = fopen($fileName, 'r');
while(($line = fgets($file)) != false) {
echo $line."\n";
}
?>请给我讲讲这个问题。
发布于 2013-05-29 15:32:45
我不确定,但我认为PHP只是根据您使用的方法打印文件,Java读取文件并获取其中的每一行,这意味着检查每个字符是否有断行符,过程似乎完全不同。
string file_get_contents如果您尝试用PHP逐行打印文件中的每一行,速度应该会更慢。
发布于 2013-05-29 15:36:30
8秒的代码对我来说听起来太长了。老实说,我怀疑还发生了什么事。你确定这不是控制台输出花了很长时间吗?
我建议你给它计时(例如,使用System.nanoTime),在最后写出总时间,但在运行时将控制台最小化。我想你会发现它已经足够快了。
发布于 2013-05-29 15:40:47
这难道不是控制台输出速度慢的原因吗?现在您知道您的文件已被正确读取,尝试注释掉行System.out.println(line);。
https://stackoverflow.com/questions/16807928
复制相似问题