标签: bufferedreader

java中的BufferedReader与RandomAccessFile

我正在用java编写一个小应用程序

我读了各种大小的文本文件,我需要逐行读取它们(并将行插入数组).
是否有差异BufferedReader.ReadLine(),并RandomAccessFile.ReadLine()在性能方面?

有没有理由更喜欢其中一个?

java file-io file readline bufferedreader

7
推荐指数
1
解决办法
5931
查看次数

MultiThread运行速度比单个进程慢

对于在学校的作业我被要求创建一个简单的程序,创建1000个文本文件,每个文件具有随机数量的行,通过多线程\单个进程计算有多少行.而不是删除那些文件.

现在测试过程中发生了一件奇怪的事情 - 所有文件的线性计数总是比以多线程方式计算它们要快一点,这已经激发了我课堂圈内的学术理论化课程.

Scanner用于读取所有文件时,一切都按预期工作 - 在500毫秒线性时间和400毫秒线程时间读取1000个文件

然而,当我使用BufferedReader时间下降到大约110ms线性和130ms线程.

哪部分代码会导致这个瓶颈?为什么?

编辑:只是为了澄清,我不是问为什么Scanner工作慢于BufferedReader.

完整的可编译代码:(虽然你应该改变文件创建路径输出)

import java.io.*;
import java.util.Random;
import java.util.Scanner;

/**
 * Builds text files with random amount of lines and counts them with 
 * one process or multi-threading.
 * @author Hazir
 */// CLASS MATALA_4A START:
public class Matala_4A {

    /* Finals: */
    private static final String MSG = "Hello World";

    /* Privates: */
    private static int count;
    private static Random rand;

    /* Private Methods: …
Run Code Online (Sandbox Code Playgroud)

java multithreading bufferedreader java.util.scanner

7
推荐指数
2
解决办法
1702
查看次数

如何从Java 8 Streams获取Inputstream?

我有一些来自不同文件的数据流。它的格式如下:

Stream<String> linesModifiedAndAppendedFromVariousFiles=getLines();
Run Code Online (Sandbox Code Playgroud)

但是,我需要将其提供给接受 InputStream 或 Reader 作为参数的库方法。

如何将此 Java 8 流馈送到 InputStream 或某种类型的 Reader 中?

PS:这不是关于将 java.util.streams.Stream 包装在 InputStream 周围。我正在寻找的是相反的方式。

java inputstream stream bufferedreader

7
推荐指数
1
解决办法
6933
查看次数

如何从Java中的BufferedReader对象中提取整个内容的最佳方法是什么?

我试图通过URLConnection获取整个WebPage.

最有效的方法是什么?

我已经这样做了:

URL url = new URL("http://www.google.com/");
URLConnection connection;
connection = url.openConnection();
InputStream in = connection.getInputStream();        
BufferedReader bf = new BufferedReader(new InputStreamReader(in));
StringBuffer html = new StringBuffer();
String line = bf.readLine();
while(line!=null){
    html.append(line);
    line = bf.readLine();
}
bf.close();
Run Code Online (Sandbox Code Playgroud)

html包含整个HTML页面.

java performance bufferedreader

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

BufferedReader从未准备好(用Java编写Socket编程)

我有套接字已经声明套接字像这样:

serverAddr = InetAddress.getByName(this.ip);
socket = new Socket(serverAddr, port);
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
Run Code Online (Sandbox Code Playgroud)

但是,以下不起作用.in.ready()总是返回false,如果删除,程序将冻结String message = in.readLine();

private void receive() {
        try {
            InputStreamReader isr = new InputStreamReader(socket.getInputStream());
            System.out.println(isr.getEncoding());
            BufferedReader in = new BufferedReader(isr);
            if (in.ready()) {
                String message = in.readLine();
                if (message != null) {
                    if (listener != null) {
                        listener.receiveMessage(ip, message);
                    } else {
                        print("Client recieved: " + message);//
                    }
                }
            }
            in.close();
        } catch (Exception e) {
            print("Error with input stream: …
Run Code Online (Sandbox Code Playgroud)

java sockets bufferedreader ready

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

如何两次或多次读取BufferedReader?

我有一个文本文件,每行一个整数 -

10
20
50
Run Code Online (Sandbox Code Playgroud)

我想阅读和打印这些数字两次甚至多次.我尝试了一些代码而失败了.如何更改代码以打印列表两次?

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;

public class DoubleBuffer {

    public static void main(String[] args) {

        try {

            FileInputStream fstream = new FileInputStream("c:/files/numbers.txt");

            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
            String strLine;

                // Read rows
                while ((strLine = br.readLine()) != null) {
                    System.out.println(strLine);
                }   

                // Read rows again
                while ((strLine = br.readLine()) != null) {
                    System.out.println(strLine);
                }

            in.close();
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }//try-catch

    }// main

}// class
Run Code Online (Sandbox Code Playgroud)

java io inputstream bufferedreader

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

如何使用java读取文本文件中的最后一行

我正在创建一个日志,我想读取log.txt文件的最后一行,但是一旦读完最后一行,我就无法让BufferedReader停止.

这是我的代码:

try {
    String sCurrentLine;

    br = new BufferedReader(new FileReader("C:\\testing.txt"));

    while ((sCurrentLine = br.readLine()) != null) {
        System.out.println(sCurrentLine);
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if (br != null)br.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

java io bufferedreader

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

在java中连续地通过套接字传输数据

我想通过推送和拉动异步发送/接收从一个端点到另一个端点(peer2peer)的连续数据流

因此,为了首先解决通信,我开始使用jax-ws soap绑定webservice,因为它有一个端点和推送机制的ws-addressing,但它似乎是很多开销(根据文档很重,因为不熟悉ws-*,我没有实现它,因为我需要多个客户端稍后监听流,并且流是24/7我想要线程可管理的套接字).

然后我拿了jax-rs但它不包含ws-addressing.(jax-rs 2.0)我也查看了websockets但它需要一个app服务器但是我想要一个jvm可支持的代码

所以,现在我正在尝试使用基本套接字,但我遇到的问题是通过服务器上的套接字流式传输数据,客户端不断接收它.这是第一次阅读,但没有进一步.其次,我怎样才能使它异步?

public class sSocket {  
public static void main(String args[]) throws IOException{  
    int i = 15000;
    ServerSocket ss;
    Socket socket = null;
    ss = new ServerSocket(i);        
    try
    {
        socket = ss.accept();
        socket.setKeepAlive(true);          

           int iii = 0;            
               System.out.println("New connection accepted " +  socket.getInetAddress() + ":" + socket.getPort());   
               BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
               BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

           while(iii<9)
           {
               Thread.sleep(2000);
               output.write("good" + iii + "\n");
               //System.out.print(input.readLine().toString());
               output.flush();
               iii++;
           }
               //socket.close();
       }        

    catch(IOException e)
    { …
Run Code Online (Sandbox Code Playgroud)

java sockets bufferedreader

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

如何使用Java从Hadoop读取偏移量的文件

问题:我想从HDFS读取文件的一部分并将其返回,例如从1000行的文件中返回101-120行.

我不想使用,seek因为我读过它很贵.

我有日志文件,我使用PIG处理成有意义的数据集.我一直在编写一个API来返回数据以供前端消费和显示.这些经过处理的数据集可以足够大,我不想在一个啜食中读出Hadoop中的整个文件,以节省线路时间和带宽.(比方说5 - 10MB)

目前我使用a BufferedReader来返回工作正常的小摘要文件

ArrayList lines = new ArrayList();
...
for (FileStatus item: items) {
    // ignoring files like _SUCCESS
    if(item.getPath().getName().startsWith("_")) {
        continue;
    }           

    in = fs.open(item.getPath());
    BufferedReader br = new BufferedReader(new InputStreamReader(in));

    String line;
    line = br.readLine();
    while (line != null) {
        line = line.replaceAll("(\\r|\\n)", "");
        lines.add(line.split("\t"));
        line = br.readLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在网上搜索了很多和Stack一样,但还没找到我需要的东西.

也许这完全是错误的做法,我需要一套完全独立的代码和不同的功能来管理它.对任何建议开放.

谢谢!

正如基于以下讨论的研究所补充的那样: Hadoop过程如何记录跨越块边界的记录? Hadoop FileSplit阅读

java iteration hadoop offset bufferedreader

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

以并行方式将`BufferedReader`转换为`Stream <String>`

有没有办法接收Stream<String> stream了的BufferedReader reader,使得每个字符串stream代表一行reader与该附加条件stream直接提供(之前reader读到的一切)?我想处理stream并行数据以获取它们reader以节省时间.

编辑:我想处理与阅读并行的数据.我不想并行处理不同的行.它们应该按顺序处理.

让我们举例说明我希望如何节省时间.假设我们reader将向我们展示100行.读取一行需要2 ms,处理1 ms需要1 ms.如果我先读取所有行然后处理它们,将需要300毫秒.我想要做的是:一旦读取一行,我想处理它并且并行读取下一行.总时间将为201毫秒.

我不喜欢的东西BufferedReader.lines():据我所知,当我想要处理这些线时,阅读开始了.我们假设我已经完成了reader但必须先进行预计算才能处理第一行.假设它们花费30毫秒.在上面的例子中,总时间将是231毫秒或301毫秒使用reader.lines()(你能告诉我哪些时间是正确的吗?).但是有可能在201毫秒内完成工作,因为预计算可以与读取前15行并行完成.

java bufferedreader java-8 java-stream

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