2016-10-12 13 views
0

InputStreamReaderの基本InputStreamにアクセスしようとしていますが、データがあるにもかかわらずブロックするだけです。InputStreamReaderを使用してInputStreamを使用した場合、InputStreamReaderをInputStreamに追加すると、基本となるInputStreamを使用しなくなるか、ブロックされます。 Java InputStreamが使用されている場合のみブロックされます。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();  
} 

は、私はそれがOK読み込みにInputStreamReader使用して1本の以上のラインを読む場合は、代わりに私はInputStreamを使用して1つのバイトを読み込むしようとした場合、それはブロックされます。

答えて

0

これは正しいです。 InputStreamReaderはバッファリングされているので、先読みするので、InputStreamから直接読み取った次のバイトは、あなたが望むものとはなりません。あなたはこれをすることはできません。

+0

InputStreamReaderを使用する代わりに、私は何を提案しますか? – neutralh

+0

私はこれを使用すると思いますhttp://stackoverflow.com/a/25341618/6562678 – neutralh

関連する問題