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

百科知识2025-04-273

为什么出现字符流?因为字节流操作中文不是特别方便,所以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);
       ();
       ();
    }
    ();
    ();
}

}