标签: bufferedreader

逐行读取文件的最快方法是每行有2组字符串?

我可以逐行读取每行包含两个字符串的最快方法是什么.示例输入文件将是:

Fastest, Way
To, Read
One, File
Line, By Line
.... can be a large file
Run Code Online (Sandbox Code Playgroud)

即使字符串之间有空格,每行也总共有两组字符串,例如"By Line"

目前我正在使用

FileReader a = new FileReader(file);
            BufferedReader br = new BufferedReader(a);
            String line;
            line = br.readLine();

            long b = System.currentTimeMillis();
            while(line != null){
Run Code Online (Sandbox Code Playgroud)

这是否足够有效或使用标准JAVA API有更高效的方式(请不要外部库)任何帮助表示赞赏谢谢!

java filereader bufferedreader

17
推荐指数
1
解决办法
6万
查看次数

为什么BufferedReader的性能比BufferedInputStream差得多?

我知道使用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();
}
Run Code Online (Sandbox Code Playgroud)

和:

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();
}
Run Code Online (Sandbox Code Playgroud)

我已尝试使用各种缓冲区大小的测试,所有缓冲区大小都是150兆字节的文件.以下是结果(缓冲区大小以字节为单位;时间以毫秒为单位):

Buffer   Input
  Size  Stream  Reader
 4,096    145     497
 8,192    125     465
16,384 …
Run Code Online (Sandbox Code Playgroud)

java performance bufferedinputstream bufferedreader

16
推荐指数
1
解决办法
2万
查看次数

BufferedReader跳过第一行

我使用以下内容bufferedreader来读取文件的行,

BufferedReader reader = new BufferedReader(new FileReader(somepath));
while ((line1 = reader.readLine()) != null) 
{
    //some code
}
Run Code Online (Sandbox Code Playgroud)

现在,我想跳过阅读文件的第一行,我不想使用计数器行int lineno来保持行的计数.

这该怎么做?

java bufferedreader

16
推荐指数
3
解决办法
5万
查看次数

使用Java中的BufferedReader重置缓冲区?

我正在使用类BufferedReader在缓冲区中逐行读取.当读取缓冲区中的最后一行时,我想再次从缓冲区的开头读取.我已经读过关于mark()和reset()的内容,我不确定它的用法,但我不认为它们可以帮助我解决这个问题.

有没有人知道如何在到达最后一行后从缓冲区的开头开始阅读?就像我们可以使用RandomAccessFile的seek(0)一样?请.谢谢

java file-io bufferedreader

15
推荐指数
2
解决办法
6万
查看次数

如何使用Java中的BufferedReader读取文件结尾(EOF)?

我在读取输入时遇到EOF问题Java.在这里,有单输入,输出考虑每行的输入.

例:

输入:

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

输出:

0 
1
0
1
0
Run Code Online (Sandbox Code Playgroud)

但是,我使用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());
}
Run Code Online (Sandbox Code Playgroud)

java io bufferedreader

15
推荐指数
2
解决办法
13万
查看次数

BufferedReader:将多行读入单个字符串

我正在使用BufferedReader从txt文件中读取数字进行分析.我现在的方式是 - 使用.readline读取一行,使用.split将此字符串拆分为一个字符串数组

public InputFile () {
    fileIn = null;

    //stuff here

    fileIn = new FileReader((filename + ".txt"));
    buffIn = new BufferedReader(fileIn);


    return;
    //stuff here
}
Run Code Online (Sandbox Code Playgroud)
public String ReadBigStringIn() {
    String line = null;

    try { line = buffIn.readLine(); }
    catch(IOException e){};

    return line;
}
Run Code Online (Sandbox Code Playgroud)
public ProcessMain() {
    initComponents();
    String[] stringArray;
    String line;

    try {
        InputFile stringIn = new InputFile();
        line = stringIn.ReadBigStringIn();
        stringArray = line.split("[^0-9.+Ee-]+"); 
        // analysis etc.
    }
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果txt文件有多行文本怎么办?有没有办法输出一个长字符串,或者可能是另一种方法呢?也许用while(buffIn.readline != null) {}?不知道如何实现这一点.

感谢赞赏,谢谢.

java text-processing bufferedreader

14
推荐指数
2
解决办法
5万
查看次数

如何在Java 1.4中设置BufferedReader和PrintWriter的超时?

如何在使用套接字连接创建的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));
    }
}
Run Code Online (Sandbox Code Playgroud)

在这段代码的范围之外,我已经施加了1000毫秒的套接字超时,它在等待初始连接时按预期工作.但程序阻塞在(str = br.readLine()).如果客户端挂起或崩溃,它永远不会停止阻止,除非我终止进程(即使这样也不总是有效).

有问题的客户端代码与此非常相似,并且以类似的方式阻塞.

java sockets java1.4 bufferedreader printwriter

14
推荐指数
4
解决办法
3万
查看次数

如何知道BufferedReader Stream是否已关闭

我在Java中有两个线程.

第一个线程正在关闭bufferedreader(br.close())

当第二个线程在同一个阅读器上读取时,我得到了一个 IOException (Stream Closed)

即使我使用,我也会得到这个例外 br.ready()

有没有办法知道流是否已经关闭?

java io bufferedreader

13
推荐指数
2
解决办法
2万
查看次数

Socket,BufferedReader挂起在readLine()

我有一台服务器,最初这样做: -

BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
for (;;) {
  String cmdLine = br.readLine();
  if (cmdLine == null || cmdLine.length() == 0)
     break; 
  ...
}
Run Code Online (Sandbox Code Playgroud)

稍后它将套接字传递给另一个类"foo"此类等待特定于应用程序的消息.

 BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
 appCmd=br.readLine();
Run Code Online (Sandbox Code Playgroud)

我的客户端发送以下序列:

  • "谷仓"
  • "你怎么样?\n"
  • "\n"
  • "将它传递给foo \n"
  • "\n"

问题是有时"foo"没有得到它的回应.它挂在了readLine().

readLine()使用提前读取服务器在服务器中缓存数据的可能性是多少?"foo"类正在变得饥饿?

如果我在客户端添加睡眠,它可以工作.但它永远有效的可能性是多少?

  • "谷仓"
  • "你怎么样?\n"
  • "\n"
  • sleep(1000);
  • "将它传递给foo \n"
  • "\n"

如何解决问题?感谢这方面的任何帮助.

java sockets io bufferedreader

13
推荐指数
2
解决办法
2万
查看次数

如何找出用于分割行的BufferedReader#readLine()行分隔符?

我正在通过BufferedReader读取文件

String filename = ...
br = new BufferedReader( new FileInputStream(filename));
while (true) {
   String s = br.readLine();
   if (s == null) break;
   ...
}
Run Code Online (Sandbox Code Playgroud)

我需要知道线条是否以'\n'或'\ r \n'分隔是否有我能找到的方法?

我不想打开FileInputStream以便最初扫描它.理想情况下,我想询问BufferedReader,因为它必须知道.

我很高兴覆盖BufferedReader来破解它,但我真的不想打开文件流两次.

谢谢,

注意:当前行分隔符(由System.getProperty("line.separator")返回)无法使用,因为该文件可能已由另一个应用程序在另一个操作系统上写入.

java bufferedreader linefeed java-io

12
推荐指数
2
解决办法
2万
查看次数