2015-04-22 2 views
3

Я создаю этот метод, который принимает параметр InputStream как параметр, но функция readLine() возвращает null. Во время отладки входной поток не пуст.BufferedReader.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

Мы не можем сказать, что не так из данного кода. Пожалуйста, отредактируйте с помощью [минимального, но полного примера] (http://stackoverflow.com/help/mcve), который воспроизводит это поведение. – Radiodef

+1

Это зависит от вашего 'inputStream', который вы не разделили. Не говоря уже, вы могли бы просто использовать 'IOUtils.toString()' из 'commons-io'. – EpicPandaForce

+0

как вы инициализируете 'inputStream'? Вы уверены, что вы передаете что-то действительное для 'inputStream', так что' readLine() 'не возвращает« null »? – Blip

ответ

0

Пожалуйста, попробуйте это,

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

я считаю, что необработанные данные, как это принимается не отформатирована следовать набор символов. так упоминая UTF-8 (U от Universal Character Set + Transformation Format-8-бит может помочь

0

Вы уверены, что вы инициализации и передачи действительного InputStream функции?

Кроме того, просто FYI может быть, вы пытались назвать вашу функцию convertInputStreamToString вместо convertInputStringToString?

Вот две другие способы преобразования вашего InputStream в строку, попробуйте это может быть?

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

EDIT: Вам не нужно явно преобразовать ByteArrayInputStream в InputStream. Вы можете сделать прямо:

InputStream inputStrm = new ByteArrayInputStream(sourceBytes); 
Смежные вопросы