黑马程序员技术交流社区
标题:
关于io流的疑惑问题。新手勿喷。
[打印本页]
作者:
皮卫凯
时间:
2012-9-17 14:07
标题:
关于io流的疑惑问题。新手勿喷。
本帖最后由 皮卫凯 于 2012-9-17 21:33 编辑
import java.io.*;
public class FileInpTest
{ public static void main(String[] args) throws Exception
{ FileOutputStream fos=new FileOutputStream("ceshi.txt"); //1
fos.write("hello world".getBytes());//2
FileInputStream fis=new FileInputStream("ceshi.txt");//3
byte[] bf=new byte[1024];
int len=0; len=fis.read(bf);//4
System.out.println(new String(bf,0,len));
fis.close();
fos.close();
}
}
这一段代码 第1句 创建一个文件输出流对象 fos并指向ceshi.txt
第2句 fos.write() 这句话该怎么理解呢?是将 "hello world".getBytes() 写入到文件还是写入到fos这个输出流对象?
第3句 创建一个文件输入流对象 fis并指向ceshi.txt
第4句 fis.read(bf) 读入到bf数组中 请大侠帮忙回答上面问题!
上面的代码是一个例子,下面的问题则是自己初学java io部分一直搞不懂的共性问题:
问题1: 所谓的输入输出流对象 到底是该理解成为一个类似运动的传送带(传送数据)还是一个节点(静止的)?
举个例子: fileinputstream中的read(byte[] b) 方法 api中是这样表述的: read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个字节数组中。 将字节数据读入到一个字节数组中 这点可以理解 FileOutputStream中的write(byte[] b) 方法如下: write(byte[] b) 将 b.length 个字节从指定字节数组写入此文件输出流中。 这里将字节数据写入到输出流?怎么理解?写入到输出流就是写入到目的地了吗 ? 不好意思 我尽可能地表达清楚我的疑问 还是怕大家看不明白....
问题2 输入输出流的类中 最基本的有4个 分别是字节和字符的输入和输出 而后面的bufferreader类通常叫做包装类 请问这是个什么概念?
作者:
严海荣
时间:
2012-9-17 14:43
第2句 fos.write() 这句话该怎么理解呢?是将 "hello world".getBytes() 写入到文件还是写入到fos这个输出流对象?
fos.write("hello world".getBytes());//2
在fos中写,就是写到输出流对象fos中
问题一: write(byte[] b) 将 b.length 个字节从指定字节数组写入此文件输出流中。 这里将字节数据写入到输出流?怎么理解?写入到输出流就是写入到目的地了吗 ?
write方法是fos输出流调用的,就是写入了输出流,写到了输出流是先存放在流里,然后调用flush()方法才将流里的数据清除传到目的地了。
问题二: 输入输出流的类中 最基本的有4个 分别是字节和字符的输入和输出 而后面的bufferreader类通常叫做包装类 请问这是个什么概念?
这里的包装类就是缓冲区,就是把写入流里的数据先存到缓冲区,然后读的时候可以从缓冲区高效率的读。举个例子:水龙头在滴水,水就是写出的数据,用嘴接水就比较麻烦,用一个杯子蓄水,然后拿杯子喝就爽多了,那杯子就是缓冲区,用来存数据
我是这么理解的,如果有错希望楼下能指正。
作者:
张小龙
时间:
2012-9-17 20:20
上面讲的已经差不多了。
首先,fos.write("hello world".getBytes());这句是将字符数组写到fos对象所指的内存中,还并未写到硬盘文件上。需要调用flush或者close方法才能写到硬盘的文件上
write(byte[] b) 将 b.length 个字节从指定字节数组写入此文件输出流中。 这里将字节数据写入到输出流?怎么理解?写入到输出流就是写入到目的地了吗 ?
这里,写入到流并不是写入到文件,此时数据还在内存中,并未写到文件,依然要调用flush或者close方法才能写到文件中。
后面的bufferreader类通常叫做包装类 请问这是个什么概念?
bufferedReader类是为了提高FileReader类的读入效率所写的,理解为缓冲类。有了缓冲类,就可以等缓冲类装满再一次性写入到文件,而不必读一点儿写一点儿,降低效率。
作者:
柳彬
时间:
2012-9-17 20:44
第二句fos.write() 是将 "hello world".getBytes() 写入到fos这个输出流对象,所谓输入输出对象就是一个从源流向目的地的数据序列,我个人觉得应该理解为类似运动的传送带。关于BufferedReader类只是在此基础上增加了缓冲的功能,当传送的数据较大时使流的效率更好而已。并且提供了readLine()方法,newLine()(跨平台)的方法等。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2