转换流的作用,主要是为了解决数据在传输过程中,因系统环境的不同造成的乱码情景,造成乱码的原因,是因为存储时的编码方式和解码时候的编码方式不一致所导致的。
会有以下一些情况,例如:
比如存储在客户端本地的记事本文件,a.txt中存储了3个汉字(GBK编码),那么这个时候其是2*3=6个字节,理想情况下在数据传输过程中,中间不会转换为其他的编码方式,服务器的编码方式是是UTF-8,会把6个字节转化为2个汉字,当然是错误的。
字符输入流 : InputStreamReader类
构造方法
public InputStreamReader(InputStream in) : 使用默认编码进行解析数据
public InputStreamReader(InputStream in,String charsetName) : 用指定的编码进行解析数据
字符输出流 : OutputStreamWriter类
构造方法
public OutputStreamWriter(OutputStream out) : 根据默认编码把字节流的转换为字符流对象
public OutputStreamWriter(OutputStream out,String charsetName) : 根据指定编码把字节流对象转换为字符流对象
网络编程章节, 还有别的用处
案例 :
桌面上有一个文件:a.txt (GBK)
要求:把a1.txt变成 UTF-8的编码格式
public class InputStreamReadTest {
public static void main(String[] args) throws IOException {
//读取本地GBK文件a.txt,生成一个字符流
FileInputStream fileInputStream = new FileInputStream("Features_IO/src/com/ligong/a.txt");
InputStreamReader isr=new InputStreamReader(fileInputStream,"gbk");
BufferedReader bf=new BufferedReader(isr);
//准备向文件中写入一个UTF编码方式字符流。
FileOutputStream fileOutputStream = new FileOutputStream("Features_IO/src/com/ligong/a1.txt");
OutputStreamWriter osw=new OutputStreamWriter(fileOutputStream,"UTF-8");
BufferedWriter bw=new BufferedWriter(osw);
String line ;
while (( line = bf.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
bf.close();
}
}