字节流与字符流区别
在进行字符流操作的时候会使用到缓冲区,而字节流操作的时候是不会使用缓冲区的。
操作字符用字符流比较方便,应为字节流是以字节为单位传输的,一个汉字占两个字节。半个半个操作容易出错,出现乱码。
字符流操作字符文件
import java.io.*; class ReaderDemo { public static void main(String[] args)throws Exception { File f=new File("ReaderDemo.java"); read(f); } public static void read(File f)throws Exception { Reader r=new FileReader(f); char[] c=new char[2]; int len=0; while (r.read(c)!=-1) { System.out.print(new String(c,0,c.length)); } r.close(); } }
视频、图片、音乐用字节流操作更为方便,因为这文件都是以字节方式存储的。
使用字节流复制图片
import java.io.*; class PictureCopy { public static void main(String[] args)throws Exception { File f1=new File("Emma.jpg"); File f2=new File("Emma.jpg"); copy(f1,f2); } public static void copy(File f1,File f2)throws Exception //将文件1,复制到文件2。 { InputStream is=new FileInputStream(f1); OutputStream os=new FileOutputStream(f2); byte[] buff=new byte[1024]; while(is.read(buff)!=-1) { os.write(buff); } } }
字节转字符流
FileWrite和FileReader分别是OutputStreamWriter和InputStreamReader的直接子类,所以无论使用字节流还是字符流实际上在内存中最终都是通过字节的形式来操作流。
内存操作流
输入输出位置为内存,直接操作磁盘文件很耗性能,使用内存流可以提升性能
import java.io.*; class CharArrayDemo { public static void main(String[] args)throws Exception { String s="中华人民共和国"; CharArrayWriter cw=new CharArrayWriter(); cw.write(s); char[] ch=cw.toCharArray(); CharArrayReader cr=new CharArrayReader(ch); char[] c=new char[1024]; while(cr.read(c)!=-1) { System.out.println(c); } } }
打印流
import java.io.*;
import java.io.*; public class PrintDemo { public static void main(String[] args) throws Exception { PrintStream ps = new PrintStream("abc.txt"); //在abc.txt //打印 ps.println("abc"); ps.println(123); ps.println(false); ps.println(); ps = System.out; //System.out其实也是一个文件 ps.println("fgdfwef"); pr = new PrintWriter(System.out,true); //true参数为是否刷新 pr.println(false); pr.println("asdasdasd"); pr.println(123123); } }