读取输入流并基于分隔符

时间:2015-08-17 10:23:47

标签: 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)函数,然后处理每个bytearray。但是,为此,我需要知道分隔符的索引,它可能再次读取整个流。

请建议是否有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:1)

var testToWrite="Sl No"+"\t"+" Age"+"\t"+"Name"+"\n"+"0"+"\t"+" 21"+"\t"+"Rob"+"\n"+"1"+"\t"+" 22"+"\t"+"bob"+"\n"; Scanner一起使用是有效的:它使用(构造的)正则表达式,并且只会读取您的输入一次。

旁注:即使它会花费一点效率,使用清晰的代码总是一个好主意。这样可以让您更快地调整代码,减少错误。过早优化是万恶之源。