java - 读取输入流并根据分隔符拆分

标签 java io inputstream outputstream

我有一个场景,我将获得一个大数据作为输入流,它将有一个分隔符并将其拆分并处理它们。如果可能的话,我想完全在内存中处理。现在我在扫描仪的帮助下实现了这一点,如下所示,在代码中:

package chap5_questions;

import java.util.Scanner;

public class paintjob_chp5 {

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;

    public class ScannerTest {
        public static void main(String[] args) {
            FileInputStream fin = null;
            try {
                fin = new FileInputStream(new File("E:\\Project\\Journalling\\docs\\readFile.txt"));

            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            java.util.Scanner scanner = new java.util.Scanner(fin, "UTF-8").useDelimiter("--AABBCCDDEEFFGGHHIIaabbccdd");
            String theString = null;

            while (scanner.hasNext()) {
                theString = scanner.next();
                System.out.println(theString);
                functionToProcessStreams(theString); // This will actually do the processing.

            }

            scanner.close();
        }
    }
}

但是,我不确定这是否是最有效的方法。想到的另一件事是对输入流使用 read(b, off, len) 函数,然后处理每个字节数组。但是,为此我需要知道分隔符的索引,它可能再次读取整个流。

如果有更好的方法,请提出建议。

最佳答案

ScanneruseDelimiter() 结合使用是高效的:它使用(构造的)正则表达式并且只会读取您的输入一次。

附带说明:即使这会降低一些效率,使用清晰的代码始终是个好主意。这将使您可以更快地调整代码并减少错误。过早的优化是万恶之源。

关于java - 读取输入流并根据分隔符拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32047997/

相关文章:

java - Android 上的摘要获取 401

c - shell I/O 重定向

android - org.apache.harmony.xml.ExpatParser$ParseException 的问题

java - 如何在主 Activity 中的 TextView 上显示状态消息?

java - 使用 JPA EclipseLink 进行无连接远程 MySQL 连接

java - 这个程序是否以无限循环结束?我怎么知道?

haskell - monads current "state of the art"是用纯语言做 IO 吗?

io.write 每次都打印相同的内容?

java - 将 InputStream 写入 HttpServletResponse

java - 如何使用 PDFBox 2.0.0 从 PDF 文件签署 InputStream