IO--流--Stream

来源:互联网 发布:java是男人下 编辑:程序博客网 时间:2024/04/29 16:47

1、流分为输入流和输出流,输入/输出是相对于程序(也就是我们操作的内存)来说的。如果说信息从外部流入到程序(内存)中,就是输入流。反之,是输出流。

2、流的分类:

(1)按功能分:输入流和输出流

(2)从流结构分:字节流,以字节为处理单位;字符流,以字符为处理单位

3、字节流的输入流和输出流的基础是InputStream和OutputStream这两个抽象类,字节流的输入/输出操作由这两个类的子类实现。字符流是以字符为单位进行输入/输出处理的流,字符流输入输出的基础是Reader和Writer这两个抽象类。这两种流在底层都是以字节流处理的。


4、字节流:

(1)InputStream 和 OutputStream定义了其他流的关键方法。最重要的两个方法是read()和write(),他们分别对数据的字节进行读写

(2)read():在InputStream类中定义了3个read方法:abstract int read()、int read(byte[] b)和int read(byte[] b, int off, int len),为什么只有无参read()被定义为abstract的,而其余两个是具体的方法?因为在具体实现时,第二个read依靠第三个read来实现,而第三个read又依靠第一个read来实现,所以只有第一个read方法是与具体的I/O设备相关的,这个read是需要InputStream的子类来实现

5、FileInputStream:假设我们将C盘目录下的a.txt文件的内容读取出来:

读数据的逻辑:(a)打开流,(b)如果流里面有更多的内容执行(c),(c)读取信息,(d) 关闭流

InputStream is = new FileInputStream("c:/a.txt");//从硬盘的文件中读取内容到内存
byte[] buffer = new byte[255];//存储每次读取的内容
int length = 0;//每次实际读取的长度
while (-1 != (length = is.read(buffer, 0, buffer.length))) {
String str = new String(buffer, 0, length);//将读取的内容保存到字符串对象中
System.out.println(str);
}
is.close();//使用完一定要关闭流

6、FileOutputStream:往a.txt文件写入内容:

OutputStream os = new FileOutputStream("c:/a.txt");//如果a.txt文件存在,FileOutputStream会将文件中的原有内容清空,重新写入;如果不存在,那么FileOutputStream会先创建这个文件,然后再进行写入
String str = "what is your name?";
byte[] buffer = str.getBytes();
os.write(buffer);
os.close();

这种方式,有时候并不是我们所希望的,我们要是向往文件里追加内容的话,可以将OutputStream os = new FileOutputStream("c:/a.txt, true);//true表示不将原有内容清空,而是在原有内容的后面追加新内容






0 0
原创粉丝点击