JAVA笔记12__字节、字符缓冲流/打印流/对象流/
/** * !!:以后写流的时候一定要加入缓冲!! * 对文件或其它目标频繁的读写操作,效率低,性能差。 * 缓冲流:好处是能更高效地读写信息,原理是将数据先缓冲起来,然后一起写入或读取出来。 * * BufferedInputStream:字节缓冲流(有一个内部缓冲区数组,用于缓冲数据) */ public class Main { public static void main(String[] args) { input(); output(); } /** * 使用字节缓冲流进行读取操作 */ public static void input(){ try { InputStream in = new FileInputStream("c:\\fuck\\javaTest1.txt"); BufferedInputStream bis = new BufferedInputStream(in); //根据字节输入流构造一个字节缓冲流 Reader r= new InputStreamReader(bis); char[] cs = new char[512]; int len = -1; StringBuilder sb = new StringBuilder(); while((len=r.read(cs))!=-1){ sb.append(new String(cs)); } r.close(); bis.close(); in.close(); System.out.println(sb); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } /** * 使用字节缓冲流进行写入操作 */ public static void output(){ try { OutputStream out = new FileOutputStream("c:\\fuck\\javaTest1.txt"); BufferedOutputStream bis = new BufferedOutputStream(out); //根据字节输出流构造一个字节缓冲流 String info = "顶替要夺kasdfas山不在高"; bis.write(info.getBytes()); bis.flush(); //刷新缓冲区(把数据写入文件里) bis.close(); //关闭了会刷新缓冲区 out.close(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } }
public class Main { public static void main(String[] args) { // output(); input(); System.out.println("finished."); } /** * 使用字符缓冲流进行读取操作 */ public static void input(){ try { Reader r = new FileReader("c:\\fuck\\javaTest1.txt"); BufferedReader br = new BufferedReader(r); //根据字符输入流构造一个字符缓冲流 char[] cs = new char[512]; int len = -1; StringBuilder sb = new StringBuilder(); while((len=br.read(cs))!=-1){ sb.append(new String(cs)); } br.close(); r.close(); System.out.println(sb); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } /** * 使用字符缓冲流进行写入操作 */ public static void output(){ try { Writer w = new FileWriter("c:\\fuck\\javaTest1.txt"); BufferedWriter bw = new BufferedWriter(w); //根据字符输出流构造一个字符缓冲流 bw.write("abcde i love u 丁"); bw.flush(); w.close(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } }
/** * 打印流:主要功能是用于输出 * PrintStream:字节打印流 * PrintWriter:字符打印流 */ public class Main { public static void main(String[] args) { // print(); print2(); System.out.println("finished."); } /** * 使用PrintStream打印流 */ public static void print(){ try { OutputStream out = new FileOutputStream("c:\\fuck\\javaTest1.txt"); BufferedOutputStream bos = new BufferedOutputStream(out); PrintStream ps = new PrintStream(bos); //构造字节打印流 ps.println(3.14f); ps.println(188); ps.println(true); ps.println("it has."); ps.flush(); bos.close(); //关掉一个就行了,其它也跟着关了 } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } /** * 使用PrintWriter打印流 */ public static void print2(){ try { BufferedWriter bw = new BufferedWriter(new FileWriter("c:\\fuck\\javaTest1.txt")); PrintWriter pw = new PrintWriter(bw); pw.print("\r\n"); //输出回车换行符 pw.println(105); pw.println("饥饿营销\"饿\"成笑话"); pw.flush(); pw.close(); bw.close(); } catch (FileNotFoundException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } } }
/** * 对象流 * 对象序列化:将一个对象转化成二进制的byte流 * 序列化操作:将对象保存在文件上 ObjectOutputStream * 反序列化操作:将对象从文件中恢复 ObjectInputStream * 被序列化对象所在的类必须实现java.Serializable接口 * 序列化一组对象可采用:对象数组的形式,因为对象数组可以向Object进行转型操作 * transient关键字:声明一个实例变量,当对象存储时,它的值不需要维持。 * 当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。 * 为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。 * 当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。 */ public class Main { public static void main(String[] args) { // writerObject(); // readerObject(); // writerObject2(); readerObject2(); System.out.println("finished."); } //使用ObjectOutputStream把对象写入文件 public static void writerObject(){ try { OutputStream out = new FileOutputStream("c:\\fuck\\obj.tmp"); ObjectOutputStream oos = new ObjectOutputStream(out); //根据字节输出流构造一个对象流 oos.writeInt(106); Dog d1 = new Dog("fish7",15); oos.writeObject(d1); oos.close(); out.close(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } //使用ObjectOutputStream把一组对象写入文件(对象数组) public static void writerObject2(){ try { OutputStream out = new FileOutputStream("c:\\fuck\\obj.tmp"); ObjectOutputStream oos = new ObjectOutputStream(out); //根据字节输出流构造一个对象流 Dog[] dogs = {new Dog("fish7",15),new Dog("fish8",16),new Dog("fish9",17)}; oos.writeObject(dogs); oos.close(); out.close(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } //使用ObjectInputStream读取文件中的对象 public static void readerObject(){ try { InputStream in = new FileInputStream("c:\\fuck\\obj.tmp"); ObjectInputStream ois = new ObjectInputStream(in); //根据字节输入流构造一个对象流 int num = ois.readInt(); Dog d1 = (Dog)ois.readObject(); ois.close(); in.close(); System.out.println(num); System.out.println(d1.name+" "+d1.age); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } } //使用ObjectInputStream读取文件中的一组对象(对象数组) public static void readerObject2(){ try { InputStream in = new FileInputStream("c:\\fuck\\obj.tmp"); ObjectInputStream ois = new ObjectInputStream(in); //根据字节输入流构造一个对象流 Dog[] dogs = (Dog[])ois.readObject(); ois.close(); in.close(); for(Dog i:dogs) System.out.println(i.name+" "+i.age); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } } } /** * 类通过实现java.Serializable接口以启用其序列化功能,标记接口,没有任何方法 */ class Dog implements Serializable{ String name; transient int age; //使用transient关键字声明的属性,将不会被序列化 public Dog(String name, int age) { this.name = name; this.age = age; } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。