什么是字符流?为什么会有字符流?

时间:2025-02-21 07:20:07

为什么出现字符流?因为字节流操作中文不是特别方便,所以Java就提供字符流;字符流=字节流+编码表;字节流复制文本文件时也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼接成中文,如何识别中文呢?是因为汉字在存储时无论选择哪种编码存储,第一个字节都是负数。

字符流写数据的五种方式:

write(int c); 写一个字符

public class demo {
    public static void main(String[] args) throws IOException {
        //FileInputStream fis = new FileInputStream("D:\\wkx\\shangluo");
        FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.");
        OutputStreamWriter ow = new OutputStreamWriter(fos);
        (97);
        ();
        (98);
        ();
    }
}

write(char[] cbuf); 写一个字符数组

public class demo {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.");
        OutputStreamWriter ow = new OutputStreamWriter(fos);
        char [] ch ={97,98,99,100};
        (ch);
        ();
    }
}

write(char[] cbuf,int off, int len);写一个字符数组的一部分

public class demo {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.");
        OutputStreamWriter ow = new OutputStreamWriter(fos);
        char [] ch ={97,98,99,100};
        (ch,0,2);
        ();
    }
}

write(String str);写一个字符串

public class demo {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.");
        OutputStreamWriter ow = new OutputStreamWriter(fos);
       ("chengzi");
       ();
    }
}

write(String str,int off , int len);写一个字符串的一部分

public class demo {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.");
        OutputStreamWriter ow = new OutputStreamWriter(fos);
       ("chengzi",0,5);
       ();
    }
}

flush方法和close方法的区别:close释放资源前进行一次刷新流,close执行后不能在写内容;而flush是刷新流,执行完毕依旧可以写内容;

字符流读数据两种方式:

read();一次读取一个字符数据

public class demo {
    public static void main(String[] args) throws IOException {
       FileInputStream fis = new FileInputStream("D:\\wkx\\shangluo\\.");
       InputStreamReader ir = new InputStreamReader(fis);
       int ch;
       while ((ch=())!=-1){
           ((char)ch);
       }
    }
}

read(char[] cbuf);一次读取一个字符数组数据

public class demo {
    public static void main(String[] args) throws IOException {
       FileInputStream fis = new FileInputStream("D:\\wkx\\shangluo\\.");
       InputStreamReader ir = new InputStreamReader(fis);
       char [] cha = new char[1024];
       int len;
       while ((len=(cha))!=-1){
           (new String (cha,0,len));
       }
    }
}

字符流复制文件案例:

public class demo {
    public static void main(String[] args) throws IOException {
        InputStreamReader sr = new InputStreamReader(new FileInputStream("D:\\wkx\\shangluo\\."));
        OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream("D:\\wkx\\shangluo\\橙子.txt"));
        char [] ch = new char[1024];
        int len;
        while ((len=(ch))!=-1){
            (new String(ch,0,len));
        }
        ();
        ();
    }
}

简洁:

public class demo {
    public static void main(String[] args) throws IOException {
        FileReader sr = new FileReader("D:\\wkx\\shangluo\\.");
        FileWriter os = new FileWriter("D:\\wkx\\shangluo\\橙子.txt");
        int ch;
        while ((ch=())!=-1){
            ((char)ch);
        }
        ();
        ();
    }
}

字符缓冲流:

BufferedWriter:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或使用默认,默认可用于大多数用途;

BufferedReader:从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或使用默认,默认可用于大多数用途;

构造方法:BufferedWriter(Writer out);      BufferedReader(Reader  in);

public class demo {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("D:\\wkx\\shangluo\\."));
        BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\wkx\\shangluo\\橙子.txt"));
        char [] ar = new char[1024];
        int len;
        while ((len=(ar))!=-1){
            (new String(ar,0,len));
        }
        ();
        ();
    }
}

使用缓冲流复制文件效率更高;

字符缓冲流特有功能:

BufferedWriter:   void   newLine():写一行行分隔符,行分隔符字符串由系统属性定义

BufferedReader: public String  readLine():读一行文字,结果包含行的内容的字符串,不包含任何终止字符,如果流的结尾已经到达,则为null

public class demo {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("D:\\wkx\\shangluo\\."));
        BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\wkx\\shangluo\\橙子.txt"));

        String len;
        while ((len=())!=null){
           (len);
           ();
           ();
        }
        ();
        ();
    }
}