使用其他东西而不是 String
Using something else instead of String
我有一个大文件,我想对其进行一些“操作”。(查找一些文本,检查一些文本是否存在,获取一些文本的偏移量,可能会更改文件)。
我目前的做法是这样的:
public ResultSet getResultSet(String fileName) throws IOException {
InputStream in = new FileInputStream(fileName);
byte[] buffer = new byte[CAPACITY];
byte[] doubleBuffer = new byte[2 * CAPACITY];
long len = in.read(doubleBuffer);
while (true) {
String reconstitutedString = new String(doubleBuffer, 0 ,doubleBuffer.length);
//...do stuff
ByteArrayOutputStream os = new ByteArrayOutputStream();
os.write(doubleBuffer, CAPACITY, CAPACITY);
readUntilNow += len;
len = in.read(buffer);
if (len <= 0) {
break;
}
os.write(buffer, 0, CAPACITY);
doubleBuffer = os.toByteArray();
os.close();
}
in.close();
return makeResult();
}
我想将 String reconstitutedString 更改为其他内容。考虑到我希望能够获得有关该数据内容的一些信息,我可能会在 String
上调用 IndexOf 获得的信息,最好的选择是什么
split
或 indexOf
的最佳类型是 String
。随便用。
您可以使用 StringBuffer
或 StringBuilder
。这两个 class 几乎像 String
class 一样具有可变性的优势。
此外,只要您需要某些只有 String
提供的功能,您就可以轻松地将它们转换为 String
。要转换它们,您可以使用 toString()
方法。
您可以根据自己的情况使用其他数据类型替代 String
。但一般来说 StringBuffer
和 StringBuilder
是替代字符串的最佳选择。使用 StringBuffer
进行同步,在其他情况下使用 StringBuilder
。
最自然的选择是 CharBuffer
. Like String
and StringBuilder
it implements the CharSequence
interface
, therefore it can be used with a lot of text oriented APIs, most notably the regex engine,它是大多数搜索、拆分和替换操作的后端。
使 CharBuffer
成为自然选择的原因是它也是 charset package 使用的类型,它提供了将字符从字节转换为字节的必要操作。通过处理此 API,您可以直接从 CharBuffer
进行转换,而无需额外的数据复制步骤。
请注意,Java 的正则表达式 API 是为处理包含部分读取文件的缓冲区而准备的,并且可以报告读取更多数据是否会改变结果(参见 hitEnd()
and requireEnd()
)。
这些是构建应用程序的必要工具,这些应用程序可以在较小的块中处理大文件并且无需从中创建 String
实例(或仅在必要时,例如在提取匹配的子序列时)。
我有一个大文件,我想对其进行一些“操作”。(查找一些文本,检查一些文本是否存在,获取一些文本的偏移量,可能会更改文件)。
我目前的做法是这样的:
public ResultSet getResultSet(String fileName) throws IOException {
InputStream in = new FileInputStream(fileName);
byte[] buffer = new byte[CAPACITY];
byte[] doubleBuffer = new byte[2 * CAPACITY];
long len = in.read(doubleBuffer);
while (true) {
String reconstitutedString = new String(doubleBuffer, 0 ,doubleBuffer.length);
//...do stuff
ByteArrayOutputStream os = new ByteArrayOutputStream();
os.write(doubleBuffer, CAPACITY, CAPACITY);
readUntilNow += len;
len = in.read(buffer);
if (len <= 0) {
break;
}
os.write(buffer, 0, CAPACITY);
doubleBuffer = os.toByteArray();
os.close();
}
in.close();
return makeResult();
}
我想将 String reconstitutedString 更改为其他内容。考虑到我希望能够获得有关该数据内容的一些信息,我可能会在 String
上调用 IndexOf 获得的信息,最好的选择是什么split
或 indexOf
的最佳类型是 String
。随便用。
您可以使用 StringBuffer
或 StringBuilder
。这两个 class 几乎像 String
class 一样具有可变性的优势。
此外,只要您需要某些只有 String
提供的功能,您就可以轻松地将它们转换为 String
。要转换它们,您可以使用 toString()
方法。
您可以根据自己的情况使用其他数据类型替代 String
。但一般来说 StringBuffer
和 StringBuilder
是替代字符串的最佳选择。使用 StringBuffer
进行同步,在其他情况下使用 StringBuilder
。
最自然的选择是 CharBuffer
. Like String
and StringBuilder
it implements the CharSequence
interface
, therefore it can be used with a lot of text oriented APIs, most notably the regex engine,它是大多数搜索、拆分和替换操作的后端。
使 CharBuffer
成为自然选择的原因是它也是 charset package 使用的类型,它提供了将字符从字节转换为字节的必要操作。通过处理此 API,您可以直接从 CharBuffer
进行转换,而无需额外的数据复制步骤。
请注意,Java 的正则表达式 API 是为处理包含部分读取文件的缓冲区而准备的,并且可以报告读取更多数据是否会改变结果(参见 hitEnd()
and requireEnd()
)。
这些是构建应用程序的必要工具,这些应用程序可以在较小的块中处理大文件并且无需从中创建 String
实例(或仅在必要时,例如在提取匹配的子序列时)。