java 中的 BufferedReader 和套接字
BufferedReader and Sockets in java
假设我正在使用这样的 Socket InputStream,以便读取以下数据:
(第一部分以 ASCII 编码)
the rest of this message is binaryCRLF
01100110010...
代码:
InputStreamReader isr = new InputStreamReader(socket.getInputStream());
BufferedReader in = new BufferedReader(isr);
String line = in.readLine();
此时我期望的是 line
包含文本:
the rest of this message is binary
那我想用原来的socket InputStream:
InputStream is = socket.getInputStream();
...
读取消息的二进制部分。
现在,如果 BufferedReader 缓冲了一些二进制数据怎么办,
这将是一个问题,因为我会错过部分数据。
我错过了什么吗?
尝试
InputStreamReader isr = new InputStreamReader(socket.getInputStream());
BufferedReader in = new BufferedReader(isr);
String line ="";
String buffer="";
while((buffer= in.readLine()) != null){
line.concat(buffer);
}
这样,在 BufferedReader 中有数据之前,您会将其读入行中并且不会丢失任何缓冲数据。干杯..:)
同样为了更快的 IO,使用 nio(New Input Output) 库,尤其是 ByteBuffer 对象,您也可以在其中使用 flush() 从流中刷新数据。
In the source of BufferedReader
you will see that the default buffer size is 8192. Because of this the call of readLine()
将读取超过第一行的字节到缓冲区。
使用不同的方法。缓冲输入并读取它两次。
假设我正在使用这样的 Socket InputStream,以便读取以下数据:
(第一部分以 ASCII 编码)
the rest of this message is binaryCRLF
01100110010...
代码:
InputStreamReader isr = new InputStreamReader(socket.getInputStream());
BufferedReader in = new BufferedReader(isr);
String line = in.readLine();
此时我期望的是 line
包含文本:
the rest of this message is binary
那我想用原来的socket InputStream:
InputStream is = socket.getInputStream();
...
读取消息的二进制部分。
现在,如果 BufferedReader 缓冲了一些二进制数据怎么办,
这将是一个问题,因为我会错过部分数据。
我错过了什么吗?
尝试
InputStreamReader isr = new InputStreamReader(socket.getInputStream());
BufferedReader in = new BufferedReader(isr);
String line ="";
String buffer="";
while((buffer= in.readLine()) != null){
line.concat(buffer);
}
这样,在 BufferedReader 中有数据之前,您会将其读入行中并且不会丢失任何缓冲数据。干杯..:)
同样为了更快的 IO,使用 nio(New Input Output) 库,尤其是 ByteBuffer 对象,您也可以在其中使用 flush() 从流中刷新数据。
In the source of BufferedReader
you will see that the default buffer size is 8192. Because of this the call of readLine()
将读取超过第一行的字节到缓冲区。
使用不同的方法。缓冲输入并读取它两次。