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

Java—从InputStream读取字节数组,直到某个字符,java,inputstream,Java,Inputstream,我需要从inputstream读取Base64编码的字节数组 当我到达解码字符串中的\n字符时,我必须停止读取,我找不到有效的方法来执行此操作 现在我以这样的方式结束了,但它并没有像预期的那样工作,因为它太容易捕捉到异常并把一切都搞砸了 byte buffer[] = new byte[2048]; byte results[] = new byte[2048]; String totalResult = null; try { int bytes_rea

我需要从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’/p>< p>分隔,而不是重新创建轮子,考虑使用例如来自项目的Or.ApAC.Cudi.Cudi.Bial.Base64输入流和BuffelDead来包装输入流,如:

注:

完成后,“尝试使用资源”将自动关闭读卡器。 Base64InputStream将动态解码Base64编码字符 BufferedReader.ReadLine将\n、\r或\r\n视为行分隔符,用于确定行的结尾。 我确信存在其他库,它们将促进动态解码,或者您可以自己编写一个简单的InputStreamWrapper。
与此不同。是吗?也许不是最好的设计…这样做是为了好玩,但为了真正的项目想一个更好的设计design@AndyTurner这是一个打字错误…@多线程这是我能得到的最好的。。。不幸的是,我没有管理输入流,我只需要读取它…如果您只是尝试读取到a\n,为什么不使用totalResult=new BufferedReaderis.readLine?它看起来是一个非常好的解决方案,但我不知道为什么它不读取任何内容,只是有时读取空字符串…如果字符串是空的,并且在尝试结束时没有您可能希望捕获的异常,则表明流中的第一个字符实际上是新行NL。要确认这一点,可以将Base64InputStream子类化,并使其在转换之前打印遇到的每个字节序列。您是否可以控制传入数据的来源?这是一条实时流吗?有没有理由可以通过设计产生NL?流是否可能包含两个NL,在这种情况下,第一次读取是预期的,但第二次读取将以NL开始?
try(BufferedReader reader = new BufferedReader(new InputStreamReader(new Base64InputStream(is)))) {
    String response = reader.readLine();
    ...
}