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

标签 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();

有什么想法吗?输入流没有关闭,所以我需要从中获取数据并用 '\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/

相关文章:

java - 无法使用 thymeleaf 和 Spring Boot 保存实体

java - 如何将 InputStream 转换为 InputSource?

java - 该方法必须返回InputStream类型的结果

java - 使用多线程在java中下载文件

java - 来自 Windows 操作系统的 Apache HttpPut 请求非常慢

java - 使用 XmlPullParserFactory 解析 XML 在 while 语句中崩溃

java - InputStream.read(byte[] b) 返回意外的字节

java - 如何在Java中修改内容以制作文件版本后区分一个文件与同一文件

java - 嵌套锁上的非法状态异常