java I/O

在具体分析某一种流的前要先知道下面一些信息:
[b]4个抽象类[/b]也是流的4个超类,其它所有的相关类都是继承这几个类
字节
InputStream , OutputStream
字符
Reader , Writer
除了知道这几个超类外还需要只要流相关的几个重要的接口
Flushable 提供将缓存中数据写入底层流,是输出流的重要部分
Readable 是reader 要实现的接口
[b]在弄清楚上面这些[/b],再去看流就会清晰了很多,无论是字节的输入输出,还是字符的输入输出,还是字接的输入与字符的输入。。。等等都有很多相似度。
从宏观角度,一个是以字节的形式进行信息的传输,一个是以字符的形式进行信息传输,都有输入输出功能。
第一:字节流
1,输入流
在这里有3个重要的InputStream 实现类,这3个也是大家经常用到的
1, FileInputStream 文件输入流,它是直接继承InputStream 的。
2, FilterInputStream 过滤流,它也直接继承了InputStream ,这个流大家似乎有些陌生,但是它的2个子类大家一定非常熟悉
<1>BufferedInputStream 缓存流,把拿到的数据先存到缓存中,最后在一起提交,提高效率
<2>DataInputStream 从最底层读取数据,也叫做二进制流
2,输入流也有3个重要的实现类,跟上面的类似
第二:字符流
1,输入流
Reader 实现Readerable接口
它是以字符的形式写入数据,重要的2个实现类是
1,FileReader (继承InputStreamReader[该类又继承了Reader])
2, BufferedReader 直接继承了Reader
2, 输出流 跟输入流类似,把Reader改为Writer即可
对于上面2点,我没有写的非常详细,是因为他们之间大部分都是一样的,只是个别地方出现一点差异,最重要的就是File,Buffered,Data这些字样,
由于读取数据的方式有很多种,需要根据不同的条件来进行筛选,如果需要读取的是一些不含中文的一些字母,数量不多就可以用不同的输入输出字节流,
如果需要从文件中读取,或者写到文件中就需要文件流,当读取的数量较大的时候就需要用缓存流,字符流比较适合最小单位是字符的数据存储方式的数据。
我用一个测试类来写下上面几个常用流。
public class BufferedTest {


public static void main(String[] args) {
BufferedTest test=new BufferedTest();
test.test1();
test.test2();

}
//test1 BufferedInputStream and BufferedOutputStream
public void test1(){
try {
InputStream in=new FileInputStream(new File("d:/intStream.txt"));
byte [] b=new byte[100];
BufferedInputStream bi=new BufferedInputStream(in);
bi.read(b);
OutputStream out=new FileOutputStream(new File("d:/outStream.txt"));
BufferedOutputStream bo=new BufferedOutputStream(out);
bo.write(b);
//将缓存中数据写如文件
bo.flush();

} catch (FileNotFoundException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}
}
//test2 BufferedReader and BufferedWriter
public void test2(){
try {
Reader reader=new FileReader(new File("d:/reader.txt"));
BufferedReader br=new BufferedReader(reader);
char a[]=new char[100];
br.read(a);
FileWriter fw=new FileWriter(new File("d:/writer.txt"));
BufferedWriter bw=new BufferedWriter(fw);
bw.write(a);
//将缓存中数据写如文件
bw.flush();

} catch (FileNotFoundException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值