字节流 InputStream OutputStream 字符流 Reader Writer 他们都是抽象类 具体实现 字节流 FileInputStream FileOutputStream 字符流 FileReader FileWriter 字节流转换成字符流可以用 InputSteamReader OutputStreamWriter 转换成BufferdReader BufferedWriter 他们具有缓冲区 例如:读取文件 从字节流输入到字符流输入 定义一个字节流: Java代码 FileInputStream fileInputStream = new FileInputStream("d:/text.txt"); // 定义一个指向D:/TEXT.TXT 的字节流 InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream); //字节流转换成InputStreamReader BufferedReader bufferedReader = new BufferedReader(inputSteamReader); //InputStreamReader 转换成带缓存的bufferedReader FileInputStream fileInputStream = new FileInputStream("d:/text.txt"); // 定义一个指向D:/TEXT.TXT 的字节流 InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream); //字节流转换成InputStreamReader BufferedReader bufferedReader = new BufferedReader(inputSteamReader); //InputStreamReader 转换成带缓存的bufferedReader 可以把读出来的内容赋值给字符 Java代码 String ss = new String(); String s; while((s = bufferedReader.readLine())!=null){ ss += s; } String ss = new String(); String s; while((s = bufferedReader.readLine())!=null){ ss += s; } 例如:写入文件 从字节流输出到字符流输出 Java代码 FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt"); //定义一个 指向D:/TEXT.TXT文件 OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream); BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); bufferedWriter.write(s); bufferedWriter.close(); outputStreamWriter.close(); fileOutputStream.close(); FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt"); //定义一个 指向D:/TEXT.TXT文件 OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream); BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); bufferedWriter.write(s); bufferedWriter.close(); outputStreamWriter.close(); fileOutputStream.close(); 字符输入流向字节输入流的转换 import java.io.*; public class InputStreamFromReader extends InputStream { Reader reader; String encoding=null; byte[] buf=null; int bufSize=0; public InputStreamFromReader(Reader reader) { this.reader=reader; } public InputStreamFromReader(Reader reader,String encoding) { this.reader=reader; this.encoding=encoding; } @Override public int read() throws IOException { if(bufSize<1)//缓冲中无数据,填充缓冲数组 { int ch=reader.read();//读取下一个字符 if(ch==-1) //结束 return -1; String temp=new String(new char[]{(char)ch});//构造字符串 //根据编码获取字节数组,放在字节缓冲中 if(this.encoding==null) this.buf=temp.getBytes(); else this.buf=temp.getBytes(this.encoding); this.bufSize=this.buf.length; } //从缓冲中返回 return buf[bufSize--]&0xff; } }