2015-04-22 98 views
3

我正在創建此方法,它以InputStream爲參數,但readLine()函數返回null。在調試時,inputstream不是空的。BufferedReader.readline()返回空值

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

我們不能真正說出給定的代碼有什麼問題。請使用[minimal,但完整的示例](http://stackoverflow.com/help/mcve)進行編輯,以重現此行爲。 – Radiodef

+1

這取決於你的'inputStream',你沒有共享。更不用說,你可以使用'commons-io'的'IOUtils.toString()'。 – EpicPandaForce

+0

你如何初始化'inputStream'?你確定你正在向'inputStream'傳遞一些有效的東西,以使'readLine()'不返回'null'嗎? – Blip

回答

0

請試試這個,

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

我相信,它被認爲是未格式化遵循字符集的原始數據。所以從通用字符集+轉型提的UTF-8(U格式 - 8位可能有助於

0

你確定要初始化並通過有效的InputStream功能?

而且,只是FYI也許你試圖命名功能convertInputStreamToString而不是convertInputStringToString

這裏是您的InputStream轉換爲字符串的另外兩種方式,嘗試這些可能?

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