我可以逐行读取每行包含两个字符串的最快方法是什么.示例输入文件将是:
Fastest, Way
To, Read
One, File
Line, By Line
.... can be a large file
即使字符串之间有空格,每行也总共有两组字符串,例如"By Line"
目前我正在使用
FileReader a = new FileReader(file);
            BufferedReader br = new BufferedReader(a);
            String line;
            line = br.readLine();
            long b = System.currentTimeMillis();
            while(line != null){
这是否足够有效或使用标准JAVA API有更高效的方式(请不要外部库)任何帮助表示赞赏谢谢!
我知道使用BufferedReader(包装FileReader)将比使用BufferedInputStream(包装FileInputStream)慢得多,因为原始字节必须转换为字符.但我不明白为什么它这么慢!以下是我正在使用的两个代码示例:
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(filename));
try {
  byte[] byteBuffer = new byte[bufferSize];
  int numberOfBytes;
  do {
    numberOfBytes = inputStream.read(byteBuffer, 0, bufferSize);
  } while (numberOfBytes >= 0);
}
finally {
  inputStream.close();
}
和:
BufferedReader reader = new BufferedReader(new FileReader(filename), bufferSize);
try {
  char[] charBuffer = new char[bufferSize];
  int numberOfChars;
  do {
    numberOfChars = reader.read(charBuffer, 0, bufferSize);
  } while (numberOfChars >= 0);
}
finally {
  reader.close();
}
我已尝试使用各种缓冲区大小的测试,所有缓冲区大小都是150兆字节的文件.以下是结果(缓冲区大小以字节为单位;时间以毫秒为单位):
Buffer   Input
  Size  Stream  Reader
 4,096    145     497
 8,192    125     465
16,384 …我使用以下内容bufferedreader来读取文件的行,
BufferedReader reader = new BufferedReader(new FileReader(somepath));
while ((line1 = reader.readLine()) != null) 
{
    //some code
}
现在,我想跳过阅读文件的第一行,我不想使用计数器行int lineno来保持行的计数.
这该怎么做?
我正在使用类BufferedReader在缓冲区中逐行读取.当读取缓冲区中的最后一行时,我想再次从缓冲区的开头读取.我已经读过关于mark()和reset()的内容,我不确定它的用法,但我不认为它们可以帮助我解决这个问题.
有没有人知道如何在到达最后一行后从缓冲区的开头开始阅读?就像我们可以使用RandomAccessFile的seek(0)一样?请.谢谢
我在读取输入时遇到EOF问题Java.在这里,有单输入,输出考虑每行的输入.
例:
输入:
1
2
3
4
5
输出:
0 
1
0
1
0
但是,我使用Java进行编码,当我输入两个数字时,将打印单个输出.我想在Java中EOF使用单行输入和打印单行输出每行(终止)BufferedReader.
这是我的代码:
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
StringBuffer pr = new StringBuffer("");
String str = "";
while((str=input.readLine())!=null && str.length()!=0) {
    BigInteger n = new BigInteger(input.readLine());
}
我正在使用BufferedReader从txt文件中读取数字进行分析.我现在的方式是 - 使用.readline读取一行,使用.split将此字符串拆分为一个字符串数组
public InputFile () {
    fileIn = null;
    //stuff here
    fileIn = new FileReader((filename + ".txt"));
    buffIn = new BufferedReader(fileIn);
    return;
    //stuff here
}
public String ReadBigStringIn() {
    String line = null;
    try { line = buffIn.readLine(); }
    catch(IOException e){};
    return line;
}
public ProcessMain() {
    initComponents();
    String[] stringArray;
    String line;
    try {
        InputFile stringIn = new InputFile();
        line = stringIn.ReadBigStringIn();
        stringArray = line.split("[^0-9.+Ee-]+"); 
        // analysis etc.
    }
}
这工作正常,但如果txt文件有多行文本怎么办?有没有办法输出一个长字符串,或者可能是另一种方法呢?也许用while(buffIn.readline != null) {}?不知道如何实现这一点.
感谢赞赏,谢谢.
如何在使用套接字连接创建的BufferedReader和PrintWriter上设置超时?这是我现在为服务器提供的代码,直到服务器或客户端崩溃为止:
while(isReceiving){
    str = null;
    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
    while ((str = br.readLine()) != null){
        System.out.println("Processing command " + str);
        pw.println(client.message(str));
    }
}
在这段代码的范围之外,我已经施加了1000毫秒的套接字超时,它在等待初始连接时按预期工作.但程序阻塞在(str = br.readLine()).如果客户端挂起或崩溃,它永远不会停止阻止,除非我终止进程(即使这样也不总是有效).
有问题的客户端代码与此非常相似,并且以类似的方式阻塞.
我在Java中有两个线程.
第一个线程正在关闭bufferedreader(br.close())
当第二个线程在同一个阅读器上读取时,我得到了一个 IOException (Stream Closed)
即使我使用,我也会得到这个例外 br.ready()
有没有办法知道流是否已经关闭?
我有一台服务器,最初这样做: -
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
for (;;) {
  String cmdLine = br.readLine();
  if (cmdLine == null || cmdLine.length() == 0)
     break; 
  ...
}
稍后它将套接字传递给另一个类"foo"此类等待特定于应用程序的消息.
 BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
 appCmd=br.readLine();
我的客户端发送以下序列:
问题是有时"foo"没有得到它的回应.它挂在了readLine().
readLine()使用提前读取服务器在服务器中缓存数据的可能性是多少?"foo"类正在变得饥饿?
如果我在客户端添加睡眠,它可以工作.但它永远有效的可能性是多少?
sleep(1000);如何解决问题?感谢这方面的任何帮助.
我正在通过BufferedReader读取文件
String filename = ...
br = new BufferedReader( new FileInputStream(filename));
while (true) {
   String s = br.readLine();
   if (s == null) break;
   ...
}
我需要知道线条是否以'\n'或'\ r \n'分隔是否有我能找到的方法?
我不想打开FileInputStream以便最初扫描它.理想情况下,我想询问BufferedReader,因为它必须知道.
我很高兴覆盖BufferedReader来破解它,但我真的不想打开文件流两次.
谢谢,
注意:当前行分隔符(由System.getProperty("line.separator")返回)无法使用,因为该文件可能已由另一个应用程序在另一个操作系统上写入.
bufferedreader ×10
java ×10
io ×3
sockets ×2
file-io ×1
filereader ×1
java-io ×1
java1.4 ×1
linefeed ×1
performance ×1
printwriter ×1