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;
    }
}
时间: 2024-10-18 04:23:52

JAVA笔记12__字节、字符缓冲流/打印流/对象流/的相关文章

Java之缓冲流(字节/字符缓冲流)

概述 缓冲流,也叫高效流,是对4个基本的 FileXxx 流的增强,所以也是4个流,按照数据类型分类: 字节缓冲流: BufferedInputStream , BufferedOutputStream 字符缓冲流: BufferedReader , BufferedWriter 缓冲流的基本原理及好处 是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率. BufferedOutputStream 字节缓冲输出流 java.io.Buff

Java笔记十九.深入解析I/O编程之流的层次结构

深入解析I/O编程之流的层次结构 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 大多数应用程序都需要与外部设备进行数据交换,最常见的外部设备包含磁盘和网络.所谓I/O(Input/Output缩写),即指应用程序对这些设备的数据输入与输出.在程序中,键盘被当作输入文件.显示器被当作输出文件使用.Java语言定义了许多专门负责各种方式的输入输出,这些类都被方法Java.io包中. 一.理解流的概念 1. 数据流 数据流是一串连续不断的数据的集

[疯狂Java]I/O:I/O流的最高境界——对象流(序列化:手动序列化、自动序列化、引用序列化、版本)

1. 什么是对象流:序列化/反序列化的概念 1) 对象流是和字节流/字符流同处于一个概念体系的: a. 这么说字节流是流动的字节序列,字符流是流动的字符序列,那么对象流就是流动的对象序列咯? b. 概念上确实可以这样理解,对象流就是专门用来传输Java对象的: c. 但是字节和字符都是非常直观的二进制码(字节本身就是,而字符是一种二进制编码),二进制码的流动是符合计算机的概念模型的,可是对象是一个抽象的东西,对象怎么能像二进制码那样流动呢? d. 其实很好理解,对象流只不过是Java的API而已

Java笔记----字节流与字符的常见类型

字节流: InputStream   |-- FileInputStream (基本文件流)   |-- BufferedInputStream   |-- DataInputStream |-- ObjectInputStream 字符流 Reader |-- InputStreamReader (byte->char 桥梁) |-- BufferedReader (常用) Writer |-- OutputStreamWriter (char->byte 桥梁) |-- BufferedW

Java之 IO流、字符流、字节流、缓冲流、对象流等各种流

File类:使用Java进行操作文件,通过一些方法进行操作.比如创建文件,删除文件,判断是否存在,文件大小,文件的目录等等,还有文件夹的一些操作. IO流:根据类别可以进行分类. 按照流向:输入流Input 输出流Output 按照字节个数:字节流和字符流 字节流: InputStream:抽象类,无法直接使用,通过其子类FileInputStream,从文件中获取字节. OutputStream:抽象类,无法直接使用,通过其子类FileOutputStream,向文件写入字节. 字符流: Re

java字节缓冲流和字符缓冲流

一.字节缓冲流 1.介绍 字节缓冲流根据流的方向,分为: 1.写入数据到流中,字节缓冲输出流 BufferedOutputStream 2.读取流中的数据,字节缓冲输入流 BufferedInputStream 它们的内部都包含了一个缓冲区,通过缓冲区读写,就可以提高了IO流的读写速度 2.字节缓冲输出流BufferedOutputStream 构造方法: public BufferedOutputStream(OutputStream out):创建一个新的缓冲输出流,以将数据写入指定的底层输

Java基础知识强化之IO流笔记39:字符流缓冲流之特殊功能

1. 字符缓冲流的特殊方法 BufferedWriter: 1 public void newLine():根据系统来决定换行符 BufferedReader: 1 public String readLine():一次读取一行数据 包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null 2. 代码示例: 1 package cn.itcast_05; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedW

Java基础知识强化之IO流笔记37:字符流缓冲流之BufferedWriter / BufferedReader使用

1. 字符流缓冲流: 字符流为了高效读写,也提供了对应的字符缓冲流. BufferedWriter:字符缓冲输出流 BufferedReader:字符缓冲输入流 2. BufferedWriter使用:     将文本写入字符输出流,缓冲各个字符,从而提供单个字符.数组和字符串的高效写入.可以指定缓冲区的大小,或者接受默认的大小.在大多数情况下,默认值就足够大了. (1)BufferedWriter的构造方法: 构造方法摘要 BufferedWriter(Writer out)         

java 21 - 6 字符缓冲流的特殊方法以及该方法高效复制文件

字符缓冲流的特殊方法: A.BufferedWriter: public void newLine():根据系统来决定换行符 1 private static void write() throws IOException { 2 //创建字符输出缓冲流 3 BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt")); 4 for(int x = 0;x < 10 ; x++){ 5 bw.write(&quo