如何阅读Big String Chunks Wise?

问题描述 投票:1回答:1

我在文件中有一组以下的字符串用于示例

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

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

在字符串内部,#是一个分隔符。那么有什么方法可以读取小数据包或最小实体(如位)的行,这样我就不会遇到内存问题?

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

有什么建议请...!

谢谢

java memory-management
1个回答
0
投票

当然 - 这就像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
}
© www.soinside.com 2019 - 2024. All rights reserved.