我在文件中有以下一组字符串作为示例

ABCBDJHJHD#NASNAJBSJBSJBSBS#JAJBAJBSBSBSBS#AHBAHHSBSBSBVSVBVS#HGVGFGFGF
#JKHGHGHG#JHJHJHBHBHHGG#
HGFGFGJVVGV#JHBHBHBHB


一条记录的大小也可以以GB为单位!

在字符串内部,#是分隔符。那么,有什么办法可以读取小数据包中的行或最小的实体(如位),从而避免出现内存问题?

我只想继续从磁盘读取#分隔的值,而不是将大行放在内存中,然后再进行进一步处理。

任何建议请...!

谢谢

最佳答案

当然-就像BufferedReader.readLine将行分隔符用作分隔符一样。 (readLine()更复杂,因为\ r \ n和\ n都是分隔符)

public static String readUntil(BufferedReader r, char separator) throws IOException {
    StringBuilder b = new StringBuilder();
    int ch;
    while ((ch = r.read()) != -1) {
        if (ch == separator) {
            return b.toString();
        } else {
            b.append((char) ch);
        }
    }
    if (b.length() == 0) {
        return null;
    } else {
        return b.toString();
    }
}


并像这样调用它:

BufferedReader r = new BufferedReader(new FileReader(file));
String nextString;
while ((nextString = readUntil(r, '#')) != null) {
    // Do something with nextString
}

关于java - 如何阅读明智的大弦大块?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55133368/

10-11 04:08