我在文件中有一组以下的字符串用于示例
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
}