Java 如何拆分包含多个“0”的字节数组;“行”;在爪哇?
假设我们有这样一个文件:Java 如何拆分包含多个“0”的字节数组;“行”;在爪哇?,java,arrays,loops,line,newline,Java,Arrays,Loops,Line,Newline,假设我们有这样一个文件: one two three (但此文件已加密) 我的加密方法以byte[]类型返回内存中的整个文件。 我知道字节数组没有“行”的概念,这是扫描器(例如)可能有的 我想遍历每一行,将其转换为字符串并对其执行操作,但我不知道 如何: 在字节数组中查找行 将原始字节数组切片为“行”(我会将这些切片转换为字符串,以发送给我的其他方法) 正确地遍历一个字节数组,其中每个迭代都是一个新的“行” 也:我需要考虑文件中可能包含的不同操作系统吗?我知道Windows和Linux中的
one
two
three
(但此文件已加密)
我的加密方法以byte[]类型返回内存中的整个文件。我知道字节数组没有“行”的概念,这是扫描器(例如)可能有的 我想遍历每一行,将其转换为字符串并对其执行操作,但我不知道 如何:
也:我需要考虑文件中可能包含的不同操作系统吗?我知道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;
特别是,有人建议我显式设置编码,但我无法看到确切的位置?正如Scott所说,我希望看到您的想法,以便我们可以帮助您修改它以满足您的需要
关于您对操作系统的最后评论;如果你想支持多个文件类型,你应该考虑多个支持这些不同文件扩展的函数。据我所知,您确实需要指定您正在使用代码读取的文件和文件类型。如果您希望流式传输此文件,我建议:
- 创建一个
来包装数组ByteArrayInputStream
- 将其包装在
中以将二进制数据转换为文本-我建议您明确指定所使用的文本编码InputStreamReader
- 在其周围创建一个
,以便一次读取一行BufferedReader
String line;
while ((line = bufferedReader.readLine()) != null)
{
// Do something with the line
}
BufferedReader
处理来自所有操作系统的换行操作
比如说:
byte[]数据=。。。;
ByteArrayInputStream=新的ByteArrayInputStream(数据);
InputStreamReader streamReader=新的InputStreamReader(stream,StandardCharsets.UTF_8);
BufferedReader BufferedReader=新的BufferedReader(streamReader);
弦线;
而((line=bufferedReader.readLine())!=null)
{
系统输出打印项次(行);
}
请注意,一般情况下,您可能希望使用try with resources块来处理流和读卡器,但在这种情况下,这并不重要,因为它只是在内存中。请分享您为尝试解决此问题所写的内容。@ScottHunter我意识到我似乎没有付出足够的努力,但我能找到的关于字节[]中换行符的所有信息(在Java上下文中)是有人试图删除换行符,他们通过对整个字节进行大规模替换[],它没有告诉我如何切片。我能得到一个提示吗?很乐意做这些工作,只是不知道从哪里开始!我不是指文件类型,而是操作系统类型。file.csv可以在CRLF编辑器或LF编辑器中编写-我不确定这是否重要,也许java有一种方法使其透明?不确定这是否有用,但java有一个字符字符#isSpace函数,用于确定字符是否为5个可能空格中的1个,其中一个为(新行)。希望这有帮助!我已经看了一下,并相应地写了一些代码。我不确定它是否足够好,可以作为答案发布并接受我自己的答案…或者使用
扫描仪
,就像OP建议的那样。在这种情况下,您可以直接使用输入流
,即尝试(Scanner s=新扫描仪(new ByteArrayInputStream(array)){while(s.hasNextLine()){String line=s.nextLine();/*对这行做些什么*/}
@Holger:就我个人而言,我在很多方面都不喜欢Scanner API。我个人每次都会使用BufferedReader
。@JonSkeet,谢谢你的提示!我能写出一些似乎有效的东西,但我想知道下一步是什么来接受你的答案?我写了一些我认为与你的想法一致的代码但是我有疑问。如果你认为这是好的,也许你可以从我的更新中复制它来编辑你的答案,然后其他看到这个问题的人可以确定它是正确的答案?对不起,我感到困惑。我在SO方面确实比你少一点经验;)@DraxDomax:好的,我会在我的答案中给出一个更完整的例子。