java中read()方法的原理是什么?

比如说InputStream的子类FilterInputStream中read()的定义:publicintread()throwsIOException{returni... 比如说InputStream的子类FilterInputStream中read()的定义:
public int read() throws IOException {
return in.read();
}
这不还是没有具体说明白read()方法是怎么读取的吗?
展开
 我来答
匿名用户
推荐于2017-11-22
展开全部
既然你能看到这个方法的源代码,那你也应该能看到FilterInputStream类的其它方法的源代码,FilterInputStream类中有十个方法和一个InputStream类型的变量,变量名是in。
十个方法里有九个是重写InputStream类的方法,并且八个是直接调用变量in的同名同参方法,另一个也只是在调用in的方法时填了两个默认参数。

而十个方法中的另一个方法是构造方法,参数是InputStream的,在方法中,直接把这个参数赋给了变量in。
所以FilterInputStream实质上只是对InputStream类做了一个简单的封装,实际调用的方法是在构造方法里传过来的InputStream对象的方法。

所以想看read()方法的具体实现,应给去找InputStream类或InputStream类的子类
更多追问追答
追问
FileInputStream类:
public int read() throws IOException {
return read0();
}

private native int read0() throws IOException;
是不是因为这个native关键字?
追答
用native修饰的方法是一个原生方法,这是java调用非java代码的接口。这类方法的实现一般是C或C++。
由于jdk是闭源的,并且这些代码没有公开,所以一般人是看不到的native方法的具体实现的
ITjob5
2016-09-05 · TA获得超过209个赞
知道小有建树答主
回答量:399
采纳率:0%
帮助的人:352万
展开全部
read方法是读取字节流。
可以通过BufferedReader 流的形式进行流缓存,之后通过read方法获取到缓存的内容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.read())!= -1) // 判断是否为最后一个字节,是的话结束循环
{
System.out.println(str);//输出读到的内容
};
流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
备注:字节流读取过程中很容易出现乱码,建议可以用readLine方式进行每行的读取。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式