最近写代码时发现用BufferedReader把InputStream包装后,使用BufferedReader读取后,然后再使用 InputStream读取时总是发现问题,好像总是丢数据,由于我在流里面同时混了二进制数据与字符串,所以很不好调度,然后专门写了下面的代码去测试发现原来是. BufferedReader读取数据时会把数据从流里面取出一部分缓存,如果你再转向去用InputStream去读取的话,BufferedReader缓存里面的数据InputStream是读取不到的 .
package bytearray;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class TestByteArray {
public byte[] generateByte() {
// 构造一个测试流,这样就不用从文件里面读取了,在这个流里面使用了大量的回车换行("\r\n"),这样方便过会的测试
// 过会,我会通过把字符串转换成byte数组,然后通过ByteArrayInputStream来构造一个数据流
return "a\r\nbc\r\ndef\r\nghi\r\nj\r\nklmn\r\nopqr\r\ns\r\ntuvwxyz "
.getBytes();
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
TestByteArray self = new TestByteArray();
byte[] be = self.generateByte();
InputStream in = new ByteArrayInputStream(be);
BufferedReader bufferReader = new BufferedReader(new InputStreamReader(
in));
// 使用DataInputStream而不直接使用Inputstream是因为这样方便,因为他提供了读取行
// 不过听说他读取行时把字节转变为字符时会有问题,所以不推荐使用,不过我们在这只做测试就没关系了
DataInputStream dataInputStream = new DataInputStream(in);
// 先读取流里面的一行数据
System.out.println("bufferReader=" + bufferReader.readLine());
// 回过头来使用dataInputStream读取数据,会发现什么也读取不到
System.out.println("dataInputStream=" + dataInputStream.readLine());
// 回过头来使用inputstream读取数据,会发现什么也读取不到
System.out.println("in=" + in.read());
// InputStream读取不到数据,然后再使用原来的BufferedReader来读取数据,发现是接着原来读取的.
System.out.println("bufferReader=" + bufferReader.readLine());
//我们上面的字符串比较小,我想如果字符串,大到缓存装不下的时候,使用inputstream回头去读取数据,肯定是能读取到的
//这个我就不测试了
}
}
转自
http://itspy.spaces.live.com/blog/cns!87AF3B24336DF461!180.entry
相关推荐
NULL 博文链接:https://lisanlai.iteye.com/blog/673253
详解BufferedReader详解BufferedReader详解BufferedReader详解BufferedReader详解BufferedReader详解BufferedReader详解BufferedReader详解BufferedReader详解BufferedReader详解BufferedReader详解BufferedReader
BufferedReader 开发的结构
NULL 博文链接:https://wushipan-easy.iteye.com/blog/1831047
文件内容的读取 BufferedReader
NULL 博文链接:https://chaoyi.iteye.com/blog/2084140
BufferedReader 是缓冲字符输入流。它继承于Reader。 BufferedReader 的作用是为其他字符输入流添加一些缓冲功能。
没有堵塞,客户端和服务端简单的信息传递,利用了BufferedReader读。
如何用java实现不同编码方式字符串的转换(包含异常处理、重复不终止输入、缓冲区bufferedreader的使用)
BufferedReader的用法---马克-to-win java视频缓存输入流的介绍
文件读写 BufferedReader BufferedWriter 去除代码后面空格 简单 readLine newLine flush
BufferedReader与BufferedWriter分别继承于Reader和Writer类,分别为字符的读取和写入添加缓冲功能,这里我们就来看一下Java中BufferedReader与BufferedWriter类的使用示例:
主要介绍了InputStreamReader和BufferedReader用法及实例讲解的相关资料,需要的朋友可以参考下
1.常用的输入输出流(BufferedReader,FileReader,InputStream,OutputStream,PrintWriter) 2.模拟记事本
Android 测试网站是否连接,这里使用有BufferedReader、HttpPost(uri)、HttpResponse、InputStreamReader等相关方法: HttpPost postRequest=new HttpPost(uri);//创建Http的post连接 ArrayList params=new ...
4.我就死在这点上,测试数据不是一条条输入的,而是所有数据从文本读入,所以不能用Scanner,得用BufferedReader。 5.最后将StringBuffer转换为String输出,不然就是一直等待测评,我也不知道为什么,或许是我自己...
import java.io.BufferedReader
如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。 * * 构造方法: * * InputStreamReader isr = new InputStreamReader(InputStream * in);//构造一个默认编码集的InputStreamReader类 ...
图片输入输出流的上传和下载关键代码 取得HttpServletRequest的InputStream输入流 InputStream is request getInputStream ; 以InputStream输入流为基础 建立一个BufferedReader对象 BufferedReader br new ...
jdk api-BufferedReader基础、应用、实战