我需要从输入流中读取 Base64 编码的字节数组。
当我到达解码字符串中的\n 字符时,我必须停止阅读,我找不到有效的方法来执行此操作。
现在我以这样的方式结束了,但它没有按预期工作,因为它太容易捕获异常并搞乱一切......
byte buffer[] = new byte[2048];
byte results[] = new byte[2048];
String totalResult = null;
try {
int bytes_read = is.read(buffer);
while (buffer[bytes_read - 1] != '\n') {
bytes_read = is.read(buffer);
String app = new String(buffer, 0, bytes_read);
totalResult += app;
}
String response = Base64.getDecoder().decode(totalResult).toString();
有什么想法吗?输入流没有关闭,所以我需要从中获取数据并用 '\n' 分隔
最佳答案
与其重新发明轮子,不如考虑使用(例如)org.apache.commons.codec.binary.Base64InputStream
来自Commons Codec项目和一个BufferedReader
( JavaDoc ) 来包装您的 InputStream
像这样:
try(BufferedReader reader = new BufferedReader(new InputStreamReader(new Base64InputStream(is)))) {
String response = reader.readLine();
...
}
注释:
- 尝试使用资源后,阅读器会自动关闭。
- Base64InputStream 将即时解码 Base64 编码的字符
-
BufferedReader.readLine()
考虑\n
,\r
或\r\n
作为行分隔符,用于确定行的结尾。 - 我确信存在其他库可以促进即时解码,或者您可以自己编写一个简单的 InputStreamWrapper。
关于Java - 从InputStream读取字节数组直到某个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50972079/