关于IO流的一些理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wq1134302142/article/details/52294810


IO流: 主要分为字节流和字符流.
字节流: 
|--- InputStream(字节输入流)
通过API的查询,可以得知,InputStream是一个抽象类;这个抽象类就表示字节输入流的所有类的超类,也即父类.
但是如何去读入字节呢,InputStream中的提供了一个read()方法,但是也是抽象的
这就意味着其子类都必须重写read()方法.
我们举个其子类的例子吧:FileInputStream
<span style="font-family:Times New Roman;"><span style="white-space:pre">	</span><span style="white-space:pre">	</span>public int read() throws IOException {
     <span style="white-space:pre">	</span>   Object traceContext = IoTrace.fileReadBegin(path);
      <span style="white-space:pre">	</span>  int b = 0;
       <span style="white-space:pre">	</span> try {
          <span style="white-space:pre">	</span>  b = read0();
        <span style="white-space:pre">	</span>} finally {
        <span style="white-space:pre">	</span>    IoTrace.fileReadEnd(traceContext, b == -1 ? 0 : 1);
       <span style="white-space:pre">	</span> }
     <span style="white-space:pre">	</span>   return b;
   <span style="white-space:pre">	</span> }

 <span style="white-space:pre">	</span>   private native int read0() throws IOException;</span>
通过分析源码:我们知道FileInputStream底层是重写了InputStream中的read()方法的,但是为了可以直接调用
通过调用本地的read0()方法,FileInputStream就可以直接使用read()方法.

|---OutputStream(字节输出流)
同样的, OutputStream也是一个抽象的类,这个抽象类就表示字节输出流的所有类的父类
与上面对应的也有个FileOutputStream;
但是FileOutputStream在创建对象时,不需要有指定的文本文件,
FileOutputStream fos = new FileOutputStream("test.txt",true);
fos.write(92);
fos.write(87);
fos.close();
就会自动在当前目录下创建一个test.txt文件.
然后如果想继续写入,可以在传入的参数里加上一个true;
最后记住关流;

字符流:
|----Readr(字符输入流)
Reader作为所有字符输入流的父类,想必跟上面一下也是一个抽象类
Reader有个子类是FileReader;与FileInputStream相似.也是同样的必须一个文本文件存在才能读取里面的
字符;
<span style="font-size: 18px;">	</span><span style="font-size:14px;">public static void main(String[] args) throws IOException {
		FileReader fr = new FileReader("xxx.txt");
		int c;
		
		while((c = fr.read()) != -1) {	   //通过项目默认的码表一次读取一个字符
			System.out.print((char)c);<span style="white-space: pre;">	</span>//类型强转
		}
		
		fr.close();
	}</span>

|----Writer(字符输出流)
Writer作为所有字符输出流的父类,也是一个抽象类
Writer有个子类是FileWtriter;与FileOutputStream相似.但是和FileOutputStream有一点不同的是它在继续写入的时候
不需要再传入参数中加上一个true,下面我们来看代码
FileWriter fw = new FileWriter("test1.txt"); //创建一个字符输出流对象 关联test1.txt文件
fw.write("hello,world");
fw.write("你好,中国");
fw.close();


     


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章