java 字节流转字符流

时间:2021-10-11 21:00:17


1.文本是一种16位无符号整数,是字符unicode编码(双字节编码).

2.文件时byte byte byte ...的数据序列。

3.文本文件是 文本(char)序列按照某种编码方案(utf-8,gbk)序列化为byte的存储结果。


4. 字符流:(reader Writer)  输出/输入流、-------操作是文本文件

  字符处理:一次处理一个字符。

InputStreamReader  完成文件(byte)流解析为文本(char)流,按照编码解析


OutputStreamWriter  提供文本(char) 流到文件(byte)流,按照编码处理.

package cn.lanz.stream;

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

public class IsrAndOswDemo {
public static void main(String[] args) throws IOException {

FileInputStream in=new FileInputStream("e:\\javaio\\lanz.txt");

InputStreamReader isr=new InputStreamReader(in);//转为字符流

FileOutputStream out=new FileOutputStream("e:\\javaio\\lanzs.txt");
OutputStreamWriter osw=new OutputStreamWriter(out, "utf-8");

/*int c;
if((c=isr.read())!=-1){
System.out.println((char)c);
}*/

char[] buffer=new char[8*1024];
int a;
while((a=isr.read(buffer,0,buffer.length))!=-1){
String s=new String(buffer,0,a);
System.out.println(s);
osw.write(buffer, 0, a);
osw.flush();
}

osw.close();
out.close();
isr.close();
in.close();
}
}


package cn.lanz.stream;

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

public class IsrAndOswDemo {
public static void main(String[] args) throws IOException {

FileInputStream in=new FileInputStream("e:\\javaio\\lanz.txt");

InputStreamReader isr=new InputStreamReader(in);//转为字符流
/*int c;
if((c=isr.read())!=-1){
System.out.println((char)c);
}*/

char[] buffer=new char[8*1024];
int a;
while((a=isr.read(buffer,0,buffer.length))!=-1){
String s=new String(buffer,0,a);
System.out.println(s);
}

isr.close();
in.close();
}
}

5.FileReader   /  FileWriter

package cn.lanz.stream;

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

public class FileRAndFileW {
public static void main(String[] args) throws IOException {
FileReader fr=new FileReader("e:\\javaio\\lanz.txt");//读取

FileWriter fw=new FileWriter("e:\\javaio\\lanzs.txt",true);//写入 ,如果为 true,则将数据写入文件末尾处(追加),而不是写入文件开始处。

char[] buffer=new char[2056];

int c;
while((c=fr.read(buffer, 0, buffer.length))!=-1){
fw.write(buffer, 0, c);
fw.flush();
}

fw.close();
fr.close();
}
}

6.字符流过滤器

 1.BufferedReader   ------readLine  一次读取一行

  2.BufferedWriter/PrintWriter  ---写一行


package cn.lanz.stream;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class BrAndBwOrPw {
public static void main(String[] args) throws IOException {
//对文件进行读写操作
BufferedReader br=new BufferedReader(new InputStreamReader
(new FileInputStream("e:\\javaio\\lanz.txt")));//读取

BufferedWriter bw=new BufferedWriter(new OutputStreamWriter
(new FileOutputStream("e:\\javaio\\lanzs.txt")));//写入


//PrintWriter pw=new PrintWriter("e:\\javaio\\lanzs.txt");//写入,方便

String line;
while((line=br.readLine())!=null){
bw.write(line);
//单独写出换行操作
bw.newLine();
bw.flush();

//pw.print(line);//加了ln就是换行
//pw.flush();
}
bw.close();
br.close();
}
}