BufferedReader.readline() 返回 null 值

3
我正在创建一个方法,该方法以InputStream作为参数,但是readLine()函数返回null。在调试时,输入流不为空。
else if (requestedMessage instanceof BytesMessage) {                    
    BytesMessage bytesMessage = (BytesMessage) requestedMessage;
    byte[] sourceBytes = new byte[(int) bytesMessage.getBodyLength()];
    bytesMessage.readBytes(sourceBytes);
    String strFileContent = new String(sourceBytes);                 
    ByteArrayInputStream byteInputStream = new ByteArrayInputStream(sourceBytes);
    InputStream inputStrm = (InputStream) byteInputStream;
    processMessage(inputStrm, requestedMessage);
}


 public void processMessage(InputStream inputStrm, javax.jms.Message requestedMessage) {
    String externalmessage = tradeEntryTrsMessageHandler.convertInputStringToString(inputStrm);
}

public String convertInputStringToString(InputStream inputStream) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));

    StringBuilder sb = new StringBuilder();

    String line;
    while ((line = br.readLine()) != null) {
        sb.append(line);
    }

    br.close();
    return sb.toString();
}

1
从给定的代码中,我们无法确定出现了什么问题。请使用最小但完整的示例进行编辑,以重现此行为。 - Radiodef
1
这取决于您的inputStream,但您没有分享它。更不用说,您可以直接使用commons-io中的IOUtils.toString() - EpicPandaForce
你是如何初始化 inputStream 的?你确定你传递给 inputStream 的内容是有效的,这样 readLine() 就不会返回 null 了吗? - Blip
2个回答

0

请试一下这个:

BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));

我相信原始数据在获取时没有按字符集格式进行格式化。因此,提到UTF-8(U来自通用字符集+转换格式—8位)可能会有所帮助。


0
你确定你初始化并将有效的InputStream传递给函数吗?
此外,只是 FYI,也许你想把函数命名为 convertInputStreamToString 而不是 convertInputStringToString?
这里有另外两种将InputStream转换为String的方法,也许可以尝试一下?
1.
String theString = IOUtils.toString(inputStream, encoding); 

2.

public String convertInputStringToString(InputStream is) {
    java.util.Scanner s = new java.util.Scanner(is, encoding).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
}

编辑: 您无需将ByteArrayInputStream显式转换为InputStream。您可以直接执行以下操作:

InputStream inputStrm = new ByteArrayInputStream(sourceBytes);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接