首页 > 代码库 > 字符流/转换流

字符流/转换流

字符流/转换流:由于字节流操作中文不方便,所以出现了。

总共有以下方法:

1、InputStreamReader、OutputStreamWriter

2、FileReader、FileWriter

3、BufferedReader BufferedWriter的普通方法

4、BufferedReader BufferedWriter的特殊方法

字符流=字节流+编码表

编码的方法:

byte[] getBytes(String charsetName):使用指定的字符集合把字符编码成字节数组            String→byte[]

解码的方法:

String(byte[] bytes,String charsetName):通过指定的字符集解码字节数组               byte[]→String

代码:

public static void main(String[] args) {

String s = "你好";                                                     编码

byte[] by = s.getBytes("UTF-8");        默认为GBK

System.out.println(Arrays.toString(by));

 

 String ss = new String (by,"UTF-8");                       解码

System.out.println(ss);

}

 

字符输入流

方法:

int read():一次读取一个字符

int read(char[] chs):一个读取一个字符数组

代码

package cn.idcast3;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

public class Day902 {
	public static void main(String[] args) throws IOException {
		InputStreamReader isr = new InputStreamReader(new FileInputStream(
				"osw.txt"));
		int ch = 0;
		while ((ch = isr.read()) != -1) {
			System.out.print((char) ch);
		}
		isr.close();
	}
}

字符输出流

方法:

public void write(int ch):一次写一个字符

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

package cn.idcast3;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class Day9 {
	public static void main(String[] args) throws IOException {
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
				"c.txt"));
		osw.write("中国");
		osw.close();
	}
}

  字符输入流和字符输出流都可以简写

  字符输入流简化为:FileReader

  字符输出流简化为:FileWriter

所以代码可以写成

FileReader:

package cn.idcast3;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Day903 {
public static void main(String[] args) throws IOException {
	FileReader fr = new FileReader("a.txt");
	int ch =0;
	while((ch=fr.read())!=-1) {
		System.out.print((char) ch);
	}
	fr.close();
}
}

FileWriter:

package cn.idcast3;

import java.io.FileWriter;
import java.io.IOException;

public class Day904 {
public static void main(String[] args) throws IOException {
	FileWriter fw = new FileWriter("a.txt");
	fw.write("中国");
	fw.close();
}
}

 高效字符流/字符缓冲流

BufferedReader:高效字符缓冲输入流

BufferedWriter:高效字符缓冲输出流

代码换成

BufferedReader br = new BufferedReader(new FileReader("a.txt"));

其他和InputSteamReader一样,同理 BufferedWriter也是

 

  字符缓冲流的特殊方法

BufferedReader

 public String readLine():一次读取一行数据,没有就返回null

BufferedWriter

 public void new Line():根据系统决定换行符

 

flush():刷新缓冲区

close()和flush()的区别:

close():关闭流对象,但是要先刷新,关闭以后流就不能使用了

flush():刷新缓冲区,流对象还能使用

      字符缓冲流特殊方法的代码

package cn.idcast3;

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

public class Day905 {
public static void main(String[] args) throws IOException {
	BufferedReader br = new BufferedReader(new FileReader("d.txt"));
	BufferedWriter bw = new BufferedWriter(new FileWriter("e.txt"));
	String line = null;
	while((line=br.readLine())!=null) {
		bw.write(line);
		bw.newLine();
		bw.flush();
	} 
	br.close();
	bw.close();
}
}

  

字符流/转换流