我正在尝试访问InputStreamReader的底层InputStream,但它只阻塞即使有数据,当我使用InputStream而不读取InputStreamReader时,当我将InputStreamReader添加到InputStream时,我不能再使用底层的InputStream或它会阻止。
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();
}
如果我使用InputStreamReader读取另一行,它会读取ok,但如果我尝试使用InputStream读取1个字节,它将阻塞。
答案 0 :(得分:0)
这是正确的。 InputStreamReader
被缓冲,因此它可以向前读取,因此您直接从InputStream
读取的下一个字节将不是您想要的那个。你不能这样做。