Tag: bufferedreader

Java – 以逗号分隔的记录到String Array中?

我是Java的新手,所以请光临我。 我正在尝试读取一个BufferedReader,该文件读入包含以逗号分隔的记录的文件。 我想在两个逗号之间拆分每个字符串(或记录),删除双引号,并将每个字符串放入String数组的索引中。 例如: 说我在文件中有这一行: (“0001”,“00203”,“82409”(换行符) “0002”,“00204”,“82500”(换行符) 等等。) 我想将0001放入一个String数组[1],我想将00203放入String数组[2],依此类推…… 以下代码遍历文件,将第二列中的所有记录放入String数组[2]。 这意味着,在执行下面的代码后,如果我执行System.out.println(arr [2]),它将打印00203和00204,而我希望数组[2]为00203,数组[5]为00204。 这是我的代码: public String[] getArray(String source) { FileInputStream fileinput = new FileInputStream(source); GZIPInputStream gzip = new GZIPInputStream(fileinput); InputStreamReader inputstream = new InputStreamReader(gzip); BufferedReader bufr = new BufferedReader(inputstream); String str = null; String[] arr = null; while((str = bufr.readLine()) != null) { arr = str.replace(“\””, […]

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

有没有办法从BufferedReader reader接收Stream stream ,这样stream中的每个字符串代表一行reader ,其中附加条件是直接提供stream ( reader读取所有内容之前)? 我想处理stream并行的数据,以便从reader那里获取它们以节省时间。 编辑:我想处理与阅读并行的数据。 我不想并行处理不同的行。 它们应该按顺序处理。 让我们举例说明我希望如何节省时间。 假设我们的reader将向我们展示100行。 读取一行需要2 ms,处理1 ms需要1 ms。 如果我先读取所有行然后处理它们,将需要300毫秒。 我想要做的是:一旦读取一行,我想处理它并且并行读取下一行。 总时间将为201毫秒。 我不喜欢BufferedReader.lines() :据我所知,当我想处理这些行时,读取就开始了。 我们假设我已经有了我的reader但在能够处理第一行之前必须进行预计算。 假设它们花费30毫秒。 在上面的例子中,使用reader.lines()总时间为231毫秒或301毫秒(你能告诉我哪些时间是正确的吗?)。 但是有可能在201毫秒内完成工作,因为预计算可以与读取前15行并行完成。

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

问题:我想从HDFS读取文件的一部分并将其返回,例如1000行的文件中的行101-120。 我不想使用seek因为我读过它很贵。 我有日志文件,我正在使用PIG处理成有意义的数据集。 我一直在编写一个API来返回数据以供前端消费和显示。 那些经过处理的数据集可以足够大,我不想在一个啜食中读出Hadoop中的整个文件,以节省线路时间和带宽。 (比方说5 – 10MB) 目前我正在使用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 = […]

文件结尾NullPointerException

我想要的是通过从命令行键入Ctrl + z并从控制台读取BufferedReader来达到EOF 。 以下代码执行此操作。 但问题是,它在到达EOF后发出NullPointerException 。 有没有办法跳过这个例外? 或者更准确地说,从控制台读取BufferedReader到达EOF的正确方法是什么? import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class EOF { public static void main(String args[]) { String s = “”; String EOF = “^z”; BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); try { while (!s.equals(EOF)) { s = read.readLine(); } } catch (IOException e) {} } }

java.io.Buffer *流与普通流有何不同?

1)缓冲流如何在后台工作,它们与普通流有什么不同?使用它们的优点是什么? 2) DataInputStream也是基于字节的。 但它有readLine()方法。 这里有什么意义?

一起使用BufferedReader和InputStream

我使用BufferedReader从InputStream中读取行。 当我直接从InputStream读取内容时,BufferedReader会忽略我的读取并继续在同一位置读取。 是否可以防止这种行为? 如果不是这样做的好习惯是什么? PS:这是我的代码: byte[] ba = new byte[1024*1024]; int off = 0; int len = 0; do { len = Integer.parseInt(br.readLine()); in.read(ba, off, len); br.readLine(); off += len; } while(len > 0); in是我的输入流和我的bufferedreader。

Java:将文本文件输出到Console

我正在尝试使用Java将文本文件输出到控制台。 我想知道最有效的方法是什么? 我已经研究了几种方法,但是很难分辨哪种方法影响最小的解决方案。 将文本文件输出到控制台将涉及读取文件中的每一行,然后将其写入控制台。 是否更好使用: 带有FileReader的缓冲读取器,读取行并执行一堆system.out.println调用? BufferedReader in = new BufferedReader(new FileReader(“C:\\logs\\”)); while (in.readLine() != null) { System.out.println(blah blah blah); } in.close(); 扫描程序读取文件中的每一行并执行system.print调用? while (scanner.hasNextLine()) { System.out.println(blah blah blah); } 谢谢。

了解BufferedReader如何在Java中工作

关于BufferedReader如何工作的非常基本的问题。 给定字符串/短语,我想从文件中找到并打印它,其中包含大量文本。 在Java中使用BufferedReader我对这个主题进行了一些研究,这是最接近的结果。 虽然没有解决我的问题。 因此,有了这些信息,为什么以下代码终止? public class MainApp { String line = null; String phrase = “eye”; try { File file = new File(“text.txt”); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); while((line = br.readLine()) != null) { if (line.equals(phrase) { System.out.println(line); } } br.close(); } catch (Exception e) { e.printStackTrace(); } } […]

你怎么能让BufferedReader.readLine()不挂?

有没有办法让BufferedReader.readLine()不挂? 我正在创建一个服务器: 检查客户端是否已提供任何输入。 如果没有,它会执行其他代码并最终循环回检查客户端的输入。 如何在不运行readLine()情况下检查客户端是否已提供任何输入? 如果我运行readLine() ,线程将挂起,直到输入传递?

缓冲读卡器没有从套接字接收数据

我正在编写一个客户端应用程序,它将通过tcp / ip接收连续的数据流。 我遇到的问题是缓冲的读取器对象没有接收到任何数据并且挂在readline方法上。 服务器的工作方式是连接到它,然后发送身份validation信息以接收数据。 我的代码的要点如下 socket = new Socket(strHost, port); authenticate(); inStream = new BufferedReader(new InputStreamReader(socket.getInputStream())); process(inStream); authenticate() { PrintWriter pwriter = new PrintWriter(socket.getOutputStream(), true); pwriter.println(authString); } process(BufferedReader bufferedReader) { while((line = bufferedReader.readLine()) != null) dostuff } 我创建了一个示例服务器应用程序,它以一种方式发送数据(我认为)服务器正在发送数据并且它连接,并接收和处理数据。 我可以在我的应用程序中正常连接到服务器。 我也可以telnet到服务器并写入身份validation字符串并使用telnet接收大量数据。 但是,我的应用程序只是挂在readLine与服务器,我不明白为什么。 进入的数据(通过telnet atleast)看起来像是以下的连续流: data;data;data;data;data data;data;data;data;data 为什么我的应用程序挂在readline上,我是不是正确输出了身份validation行? 我没有收到任何错误…… 编辑我的示例服务器代码(正常工作)…再次这只是模仿我认为真实服务器正在运行的方式,但我可以连接到我的应用程序中只是没有从真实服务器接收数据。 public static void main(String[] args) throws […]