Java-从InputStream读取字节数组,直到某个字符为止

时间:2018-06-21 15:18:31

标签: java inputstream

我需要从输入流中读取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();

有什么主意吗?输入Stream不会关闭,因此我需要从中获取数据并以'\ n'

分隔

1 个答案:

答案 0 :(得分:1)

考虑重新设计轮子,而不是考虑使用Commons Codec项目中的org.apache.commons.codec.binary.Base64InputStreamBufferedReaderJavaDoc)来包装InputStream像这样:

try(BufferedReader reader = new BufferedReader(new InputStreamReader(new Base64InputStream(is)))) {
    String response = reader.readLine();
    ...
}

注意:

  • 尝试使用资源会在完成后自动关闭阅读器。
  • Base64InputStream将即时解码Base64编码的字符
  • BufferedReader.readLine()\n\r\r\n视为行分隔符,以确定行的结尾。
  • 我确定存在其他有助于即时解码的库,或者您可以自己编写一个简单的InputStreamWrapper。