如何在Java中拆分包含多个“行”的字节数组?

说我们有一个像这样的文件:

one 
two 
three

(但此文件已加密)

我的加密方法以字节[]类型返回内存中的整个文件。
我知道字节数组没有“行”的概念,这是Scanner(例如)可以拥有的。

我想遍历每行,将其转换为字符串并对其执行操作,但我不知道 如何:

  1. 在字节数组中查找行
  2. 将原始字节数组切片为“ lines”(我会将这些切片转换为String,以发送给其他方法)
  3. 正确遍历一个字节数组,其中每次迭代都是一条新的“行”

还:我是否需要考虑文件可能组成的其他操作系统?我知道Windows和Linux中的新行之间存在一些差异,我不希望我的方法仅适用于一种格式。

编辑:按照此处回答的一些提示,我能够编写一些代码来完成工作。我仍然想知道这段代码是否值得保留,或者我正在做将来可能会失败的事情:

byte[] decryptedBytes = doMyCrypto(fileName,accessKey);
ByteArrayInputStream byteArrInStrm = new ByteArrayInputStream(decryptedBytes);
InputStreamReader inStrmReader = new InputStreamReader(byteArrInStrm);
BufferedReader buffReader = new BufferedReader(inStrmReader);

String delimRegex = ",";
String line;
String[] values = null;

while ((line = buffReader.readLine()) != null) {
    values = line.split(delimRegex);
    if (Objects.equals(values[0],tableKey)) {
        return values;
    }
}
System.out.println(String.format("No entry with key %s in %s",tableKey,fileName));
return values;

尤其是,我被建议显式设置编码,但是我看不到确切的位置?

adsli 回答:如何在Java中拆分包含多个“行”的字节数组?

如果您想流式传输,我建议:

  • 创建一个ByteArrayInputStream来包装数组
  • InputStreamReader中将其转换为将二进制数据转换为文本-我建议您明确指定所使用的文本编码
  • 围绕它创建一个BufferedReader一次读取一行

然后您可以使用:

String line;
while ((line = bufferedReader.readLine()) != null)
{
    // Do something with the line
}

BufferedReader处理所有操作系统的换行符。

是这样的:

byte[] data = ...;
ByteArrayInputStream stream = new ByteArrayInputStream(data);
InputStreamReader streamReader = new InputStreamReader(stream,StandardCharsets.UTF_8);
BufferedReader bufferedReader = new BufferedReader(streamReader);

String line;
while ((line = bufferedReader.readLine()) != null)
{
    System.out.println(line);
}

请注意,通常,您希望对流和阅读器使用try-with-resources块-但这并不重要,因为它只是在内存中。 >

,

正如Scott所说,我想看看您的想法,因此我们可以帮助您更改它以适应您的需求。

关于您对操作系统的最后评论;如果要支持多种文件类型,则应考虑建立支持这些不同文件扩展名的几种功能。据我所知,您确实需要使用代码指定要读取的文件和文件的类型。

本文链接:https://www.f2er.com/3137551.html

大家都在问