【问题标题】:BufferedReader.readline() returning null valueBufferedReader.readline() 返回空值
【发布时间】:2015-04-22 09:03:17
【问题描述】:

我正在创建这个方法,它以InputStream 作为参数,但readLine() 函数返回null。调试时,inputstream 不为空。

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();
}

【问题讨论】:

  • 我们无法从给定的代码中判断出什么问题。请使用重现此行为的minimal, but complete example 进行编辑。
  • 这取决于你的inputStream,你没有分享。更不用说,你可以只使用commons-io中的IOUtils.toString()
  • 你是如何初始化inputStream的?你确定你正在传递一些有效的东西给inputStream,所以readLine()没有返回null吗?

标签: java file inputstream


【解决方案1】:

请试试这个,

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

我相信所采集的原始数据并未按照字符集进行格式化。所以通过提及 UTF-8(来自通用字符集的 U + 转换格式——8 位可能会有所帮助

【讨论】:

    【解决方案2】:

    您确定要初始化并将有效的 InputStream 传递给函数吗?

    另外,仅供参考,也许您试图将您的函数命名为 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);
    

    【讨论】:

      猜你喜欢
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 2021-12-21
      • 2015-11-07
      • 2020-05-20
      • 2020-11-08
      相关资源
      最近更新 更多