java——IO讲解(字符流和缓冲区的使用)

在java中字节流主要是对一些视频,音频,图片进行操作,而字符流则是对一些字符操作。
和字节流一样,字符流也有两个基类:
字符输出流:“Writer”
字符输入流:“Reader”
通过一个实现类FielWriter和FielReader可以实现字符流的输入输出操作。
先介绍一下Writer的相关方法:
·public void write(int c) throws IOException
【将内容写入指定的文件,每次写入一个字符,该数据类型就是一个ASC码,根据该ASC码就可以找到对应的字符】

·public void write(char[] cbuf) throws IOException:
【每次写入一个字符数组的内容】

·public void write(String str) throws IOException:
【每次直接写入一个字符串】
示例:

package com.zhaoqiang.writer;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Iterator;

public class Demo1 {

    public static void main(String[] args) throws IOException {
        File f = new File("D:"+File.separator+"Demo"+File.separator+"test.txt");
        if (!f.getParentFile().exists()) {
            f.getParentFile().mkdirs();
            f.createNewFile();
        }
        
        // 创建字符流输出对象
        Writer out = new FileWriter(f);
        
        String str ="测试数据";
        
        // 获取字符数组
        char[] ch = str.toCharArray();
        
        // 第一种方法
        for (char c : ch) {
            out.write(c);
        }
        // 第二种方法
//      out.write(ch);
        
        // 第三种方法
//      out.write(str);
        
        
        out.flush();
        out.close();
    }

}

flush()是刷新缓存里面的数据.
下面介绍Reader里面的相关方法:
·public int read() throws IOException:
【每次读取一个字符,将字符的ASC返回,如果读取到最后返回-1】

·public int read(char[] cbuf) throws IOException
【每次读取一个字符数组的内容,返回的吗每次读取的数据的长度,
如果读取到最后返回-1】

·public abstract int read(char[] cbuf, int off, int len)
【每次读取指定的字符数组的指定的内容,
off表示要保存的数组的起始下标
len表示要保存的数据长度】
示例:

package com.zhaoqiang.Reader;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class Demo1 {

    public static void main(String[] args) throws IOException {
        File f = new File("D:"+File.separator+"Demo"+File.separator+"test.txt");
        if (!f.getParentFile().exists()) {
            f.getParentFile().mkdirs();
            f.createNewFile();
        }
        
        // 创建一个输入流对象
        Reader re = new FileReader(f);
        
        int len = 0 ;
        
        // 第一种:输入一个字符
//      while ((len = re.read()) != -1) {
//          System.out.println((char)len); // 一个一个字符输出
//      }
//      
        
        // 第二种
        char[] ch = new char[1024];
        
        while((len = re.read(ch)) != -1){
            System.out.println(new String(ch,0,len));
        }
        
        // 输入指定长度的字符
        re.read(ch, 0, 10);
        re.close();
    }

}

缓冲区:BufferedOutputStream,BufferedInputStream;
示例:

package com.zhaoqiang.buffer;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo1 {

    public static void main(String[] args) throws IOException {
        
        File f = new File("F:"+File.separator+"Demo"+File.separator+"12.jpg");
        File of = new File("D:"+File.separator+"Demo"+File.separator+"2.jpg");
        
        // 创建字节输入流缓冲区
        BufferedInputStream bi = new BufferedInputStream(new FileInputStream(f));
        
        // 创建字节输出流缓冲区
        BufferedOutputStream bs = new BufferedOutputStream(new FileOutputStream(of));
        
        byte[] by = new byte[1024];
        
        int len = 0;
    
        
        while((len = bi.read(by)) != -1){
            bs.write(by, 0, len);
            bs.flush();
        }
        bs.close();
        bi.close();
    }

}


字符流缓冲区:BufferedReader,BufferedWriter;
示例:

package com.zhaoqiang.buffer;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Demo2 {

    public static void main(String[] args) throws IOException {
        
        // 目的文件
        File f = new File("F:"+File.separator+"Demo"+File.separator+"test.txt");
        
        // 源文件
        File of = new File("D:"+File.separator+"Demo"+File.separator+"test.txt");
        
        // 字符输入流缓冲区
        BufferedReader br = new BufferedReader(new FileReader(of));
        
        // 字符输出流缓冲区
        BufferedWriter bw = new BufferedWriter(new FileWriter(f));
        
        String str = "";
        
        // 第二种方法,一行读取
        while((str = br.readLine()) != null){
            bw.write(str);
            bw.newLine();
            bw.flush();
        }
        // 第一种方法,单个字符读取
//      int len = 0;
//      while((len = br.read())!=-1){
//          bw.write(len);
//          bw.flush();
//      }
        
        bw.close();
        br.close();

    }

}

对于字符流缓冲区,和字节流缓冲区他们的底层实现还是使用的是java提供的输入输出流方法。只是添加一个缓冲区可以提高输入输出之间的传输效率。

你可能感兴趣的:(java——IO讲解(字符流和缓冲区的使用))