美文网首页
记录JAVA的IO学习

记录JAVA的IO学习

作者: ccccaixiaohao | 来源:发表于2019-06-26 22:31 被阅读0次

JAVA的IO流按流向分为两种:输入流,输出流。
* 流按操作类型分为两种:
* 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
* 字符流 : 字符流只能操作纯字符数据,比较方便。
InputStream的主要子类:
1) FileInputStream把一个文件作为InputStream,实现对文件的读取操作
   2) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
   3) StringBufferInputStream:把一个String对象作为InputStream
   4) PipedInputStream:实现了pipe的概念,主要在线程中使用
   5) SequenceInputStream:把多个InputStream合并为一个InputStream

Reader的主要子类:
|——BufferedReader
|___InputStreamReader
|__FileReader

字节流:
字节流两个抽象类:InputStream和OutputStream
1.字节流读取示例:
一次读取一个字节,直到遇到结尾返回-1


 FileInputStream fis = new FileInputStream("test.txt");
     int item;
     while((item=fis.read())!=-1) {
         System.out.println(item);
     }
     fis.close();

2.字节流写入示例:
true代表在目标文件中追加写入,否则清空重新写入

FileOutputStream fos = new FileOutputStream("out.txt",true);
        fos.write('\n');
        fos.write('s');
        fos.close();

3.字节流拷贝示例:
读取到一个字节就写入一个字节


FileInputStream fis = new FileInputStream("cat.jpg");
        FileOutputStream fos = new FileOutputStream("cat-copy.jpg");
        int i;
        while((i=fis.read())!=-1) {
            fos.write(i);
        }
        fis.close();
        fos.close();

增加一个拷贝的"容器"来提高效率,0代表从第0个位置开始,len代表写入的个数


FileInputStream fis = new FileInputStream("cat.jpg");
        FileOutputStream fos = new FileOutputStream("cat-copy.jpg");
        byte[] arr = new byte[1024*8];
        int len = 0;
        while((len = fis.read(arr))!=-1) {
            fos.write(arr, 0, len);
        }
        fis.close();
        fos.close();

通过buffer进行读写,其原理是内部有个byte[1024*8]的数组,在内存中进行读写


BufferedInputStream bis = new BufferedInputStream(new FileInputStream("cat.jpg"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("cat-copy.jpg"));
        int b;
        while((b = bis.read())!=-1) {
            bos.write(b);
        }
        bis.close();
        bos.close();

flush和closed的区别:
flush将缓存中存满或未存满的数组立即输出出来;
closed在关闭之前也会去清空缓存;

字符流:
1.字符读取实例:
一次读取一个字符,直到返回-1


FileReader fr = new FileReader("test.txt");
        int b;
        while((b = fr.read())!=-1) {
            System.out.println((char)b);
        }

2.字符写入实例:


FileWriter fw = new FileWriter("out.txt");
        fw.write("test");
        fw.close();

3.带字符数据的读写实例:
字符流不能用来读写文本类型以外的数据,因为字节转字符的过程中可能出现问题。


        FileReader fr = new FileReader("test.txt");
        FileWriter fw = new FileWriter("copy-2.txt");
        char[] arr = new char[1024];
        int len;
        while((len=fr.read(arr))!=-1) {
            fw.write(arr, 0, len);
        }
        fr.close();
        fw.close();

4.Buffer字符的读写实例:


BufferedReader br = new BufferedReader(new FileReader("test.txt"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("copy-3.txt"));
        int b;
        while((b = br.read())!=-1) {
            bw.write(b);
        }
        br.close();
        bw.close();

5.LineNumberReader实例:
该类型可以读取行数和设置行数


LineNumberReader lr = new LineNumberReader(new FileReader("test.txt"));
        String line;
        lr.setLineNumber(2);
        while((line = lr.readLine())!=null) {
            System.out.println(lr.getLineNumber()+":"+line);
        }

相关文章

网友评论

      本文标题:记录JAVA的IO学习

      本文链接:https://www.haomeiwen.com/subject/yzrfcctx.html