java I/O
程序员文章站
2022-06-10 23:14:20
...
在具体分析某一种流的前要先知道下面一些信息:
4个抽象类也是流的4个超类,其它所有的相关类都是继承这几个类
字节
InputStream , OutputStream
字符
Reader , Writer
除了知道这几个超类外还需要只要流相关的几个重要的接口
Flushable 提供将缓存中数据写入底层流,是输出流的重要部分
Readable 是reader 要实现的接口
在弄清楚上面这些,再去看流就会清晰了很多,无论是字节的输入输出,还是字符的输入输出,还是字接的输入与字符的输入。。。等等都有很多相似度。
从宏观角度,一个是以字节的形式进行信息的传输,一个是以字符的形式进行信息传输,都有输入输出功能。
第一:字节流
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这些字样,
由于读取数据的方式有很多种,需要根据不同的条件来进行筛选,如果需要读取的是一些不含中文的一些字母,数量不多就可以用不同的输入输出字节流,
如果需要从文件中读取,或者写到文件中就需要文件流,当读取的数量较大的时候就需要用缓存流,字符流比较适合最小单位是字符的数据存储方式的数据。
我用一个测试类来写下上面几个常用流。
4个抽象类也是流的4个超类,其它所有的相关类都是继承这几个类
字节
InputStream , OutputStream
字符
Reader , Writer
除了知道这几个超类外还需要只要流相关的几个重要的接口
Flushable 提供将缓存中数据写入底层流,是输出流的重要部分
Readable 是reader 要实现的接口
在弄清楚上面这些,再去看流就会清晰了很多,无论是字节的输入输出,还是字符的输入输出,还是字接的输入与字符的输入。。。等等都有很多相似度。
从宏观角度,一个是以字节的形式进行信息的传输,一个是以字符的形式进行信息传输,都有输入输出功能。
第一:字节流
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(); } } }
上一篇: RedHat升级Python到2.7.6
下一篇: 有关PHP性能优化的介绍
推荐阅读
-
Intel(英特尔) 酷睿i5 2代系列和3代系列的区别是什么?
-
移动硬盘无法访问提示:无法访问I:\ 执行页内操作时错误的解决办法
-
i7-7740X和i7-7700K的区别是什么 i7-7740X与i7-7700K性能对比测试图解
-
Intel 8代酷睿i7性能曝光 疑似Core i7-8700跑分成绩图解
-
apache简介_动力节点Java学院整理
-
ITE 8702/8712 I/O触发形式及维修方法
-
R3 1200和i3 7100哪个好?R3-1200与i3-7100的区别对比详细评测
-
Intel 16核心i9-7960X性能首曝:跑分只和Core i9-7900X打平?
-
死磕 java同步系列之mysql分布式锁
-
java当中JDBC当中的transaction例子