2016-10-12 1 views
0

Ich versuche auf den zugrunde liegenden InputStream des InputStreamReader zugreifen, aber es blockiert nur, obwohl es Daten gibt, wenn ich InputStream ohne InputStreamReader lesen, wenn ich InputStreamReader zu InputStream hinzufügen, kann ich Verwenden Sie nicht mehr den zugrunde liegenden InputStream oder es wird blockiert.Java InputStream blockiert nur wenn verwendet InputStreamReader

InputStream in = socket.getInputStream(); 
OutputStream theOutput = socket.getOutputStream(); 
BufferedReader br = new BufferedReader(
    new InputStreamReader(in, StandardCharsets.US_ASCII)); 

String line = br.readLine(); 
System.out.println(line); 
if(line.equals(Operation_Map_Upload)){ 
    String MapName = br.readLine(); 
    System.out.println(MapName); 

    String MapMaker = br.readLine(); 
    System.out.println(MapMaker); 
    String MapData = br.readLine(); 
    System.out.println(MapData); 

    int ThumbnailSize = Integer.parseInt(br.readLine()); 
    System.out.println(ThumbnailSize); 
    byte[] Thumbnail = new byte[ThumbnailSize]; 
    in.read(Thumbnail, 0, ThumbnailSize); // <---block here 
    int MapID = SaveMap(MapName, MapMaker, MapData, Thumbnail); 

    theOutput.write(("Success;" + MapID).getBytes(StandardCharsets.US_ASCII)); 
    theOutput.flush();  
} 

Wenn ich lese eine weitere Zeile mit Input es ok liest, aber wenn stattdessen ich versuche 1 Byte mit Input lesen wird es blockieren.

Antwort

0

Das ist richtig. InputStreamReader ist gepuffert, so liest es voraus, so dass das nächste Byte, das Sie direkt aus dem lesen, nicht das sein wird, das Sie sowieso wollen. Du kannst das nicht tun.

+0

Was schlagen Sie vor, anstatt einen InputStreamReader zu verwenden? – neutralh

+0

Ich denke, ich werde das http://stackoverflow.com/a/25341618/6562678 verwenden – neutralh

Verwandte Themen