杰神之Java缓冲流和序列化的用法

原创 2018年02月01日 21:33:09

缓冲流

1:定义:在内存与硬盘之间创建一个大小合适的缓冲区,当内存和硬盘进行数据访问时,能提高访问硬盘的次数,提高效率。
2:分类:缓冲分为字节缓冲流(BufferedInputStream和BufferedOutputStream)和字符缓冲流(BufferedReader和BufferedWrite)。
3:缓冲流对字节文件拷贝的效率测试:

/*
 * 测试高效流复制文件的快慢
 */
public class Demo02 {
    public static void main(String[] args) throws IOException {
        //测试
        new MyCopy2().printtime();;
    }
}

abstract class TestTime{
    public String src = "/Users/lanou/Desktop/Test/dp.png";
    public String dest = "/Users/lanou/Desktop/Test/dp01.png";
    public void printtime() throws IOException {
        long start = System.currentTimeMillis();
        //调用方法
        copyFile();
        long end = System.currentTimeMillis();
        System.out.println(end - start);
    }
    // 子类要抛异常 父类就必须有这个异常
    public abstract void copyFile() throws IOException;
}

//实现类
class MyCopy1 extends TestTime{
    // 字节流 单个字节形式   复制文件
    //          数组形式      复制文件
    // 缓冲流 单个字节形式   复制文件
    //          数组形式      复制文件
    @Override
    public void copyFile() throws IOException {
        FileInputStream fis = new FileInputStream(src);
        FileOutputStream fos = new FileOutputStream(dest);
        int len = 0;
        byte[] b = new byte[1024];
        while ((len = fis.read(b)) != -1) {
            fos.write(b, 0, len);
        }
        fis.close();
        fos.close();
    }
}
class MyCopy2 extends TestTime{
    @Override
    public void copyFile() throws IOException {
        FileInputStream fis = new FileInputStream(src);
        BufferedInputStream bis = new BufferedInputStream(fis);
        FileOutputStream fos = new FileOutputStream(dest);
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        int len = 0;
        byte[] b = new byte[1024];
        while ((len = bis.read(b)) != -1) {
            bos.write(b, 0, len);
        }
        bis.close();
        bos.close();

    }
}

4:缓冲流属于包装流,只能对已有的流进行包装,使原来的流更加强大,执行效率更高,不能关联文件。
流总结

 * 1.明确 数据源 和 数据目的地 (要操作什么)
 *  读数据源: InputStream  Reader
 *  写到数据目的地: OutputStream Writer
 * 2. 明确要操作的是什么内容
 * 文本 音频 图片 ...使用字节流(全能流)
 * 文本(按编码格式读写) 使用字符流
 * 3.明确流要在什么设备上使用
 * 文本
 * 网络 通过流进行数据交互---字节流
 * 4.是否需要提高效率
 * BUffered 缓冲流

序列化

 * 序列化流与反序列化流
 * 序列化 把对象写进文件中
 * 反序列化 从文件中把对象读取出来
 * 
 * 对象流
 * ObjectInputStream
 * ObjectOutputStream
 * 
 * 注意: 静态成员变量 是不能进行序列化的
 * 序列化 序列是对象 静态成员变量是是属于类的
 * 
 * 序列化 相当于是 把对象进行持久化
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //writeObject();
        readObject();
    }

    /**
     * @throws FileNotFoundException
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public static void readObject() throws FileNotFoundException, IOException, ClassNotFoundException {
        // 读取序列化文件(反序列化)
        // 在进行反序列化(读取)的时候 需要依赖你的便以文件.class文件 来进行读取的
        FileInputStream fis = new FileInputStream("/Users/lanou/Desktop/Test/person.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);
        // 读文件
        Object object = ois.readObject();
        System.out.println(object);
        ois.close();
    }

    /**
     * @throws FileNotFoundException
     * @throws IOException
     */
    public static void writeObject() throws FileNotFoundException, IOException {
        // 注意:如果要对对象进行实例化 必须要实现Serializable(序列化接口) 该接口是标记型接口
        // 注意 写对象都使用字节流去操作
        FileOutputStream fos = new FileOutputStream("/Users/lanou/Desktop/Test/person.txt");
        //创建对象输出流(序列化流)
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        //使用写对象的方法
        oos.writeObject(new Person("dp", 15));
        oos.close();
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

Java 缓冲流简介及简单用法

在java编程中, 我们有时会tingda
  • nvd11
  • nvd11
  • 2014年07月01日 23:55
  • 3253

java缓冲流,数据流和对象流

一:缓冲流 1:定义:在内存与硬盘之间创建一个大小合适的缓冲区,当内存和硬盘进行数据访问时,能提高访问硬盘的次数,提高效率。 2:分类:缓冲分为字节缓冲流(BufferedInputStream和...
  • xxx77889900
  • xxx77889900
  • 2016年10月24日 14:38
  • 1461

杰神之Java第一课

Java初识
  • lyj243719866
  • lyj243719866
  • 2017年12月27日 19:50
  • 156

使用缓冲输入流和缓冲输出流复制文件

使用缓冲输入流和缓冲输出流复制文件
  • wangyanming123
  • wangyanming123
  • 2016年04月27日 23:55
  • 1707

杰神之Java构造方法和静态方法

Java构造方法和静态方法构造方法一个类 可以有多个构造函数。构造函数的主要作用 一是用来实例化该类。二是 让该类实例化的时候执行哪些方法,初始化哪些属性。 * 注意事项 1.如果你没写无参构造方...
  • lyj243719866
  • lyj243719866
  • 2018年01月09日 21:36
  • 121

字节流、字符流和缓冲流

字节流和字符流,且他们都有输入流(从屏幕、硬盘或是其他数据源读取数据放入内存中)和输出流(用来向屏幕、硬盘等目的地输出内容),字节流就是一个字节一个字节的读取或是输出(字节都是8位,0到255之间的整...
  • muyisengren
  • muyisengren
  • 2014年10月15日 15:44
  • 2208

神的主权与人的自由 (李建安)

。。。预定论与救赎论的一个棘手难题乃在于神的主权与人的自由意志之间的张力。要了解神的主权与人的自由意志在豫定与救赎中的彰显与角色,必须了解主权与自由的真正内涵与意义。   神的主权   赤...
  • spritzdance
  • spritzdance
  • 2017年01月29日 17:56
  • 788

Java IO之处理流(缓冲流、转换流)

一、处理流:增强功能,提供性能,在节点流之上。二、节点流与处理流的关系节点流(字节流、字符流)处于IO操作的第一线,所有操作必须通过它们进行; 处理流可以对其他流进行处理(提高效率或操作灵活性)。三...
  • scgaliguodong123_
  • scgaliguodong123_
  • 2015年05月23日 18:57
  • 2156

Java中的字节流、缓冲流

一、Java中流的分类 1.字符流 Reader   Writer 字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节, 操作字节和字节数...
  • sinat_34669892
  • sinat_34669892
  • 2016年10月05日 14:44
  • 1556

杰神之Java合并流的使用

SequenceInputStream合并流 作用: 可以把多个文件合并成一个文件 构造方法(两种): 1.参数是 迭代器 是Vector特有的 该Vector要保存的是InputStrea...
  • lyj243719866
  • lyj243719866
  • 2018年02月05日 20:53
  • 8
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:杰神之Java缓冲流和序列化的用法
举报原因:
原因补充:

(最多只允许输入30个字)