Java第三阶段学习(四、缓冲流)

一、缓冲流:

Java中提供了一套缓冲流,它的存在,可提高IO流的读写速度

缓冲流,根据流的分类分为:字节缓冲流与字符缓冲流。

二、字节缓冲流:

字节缓冲流根据流的方向,共有2个:

1.写入数据到流中,字节缓冲输出流 BufferedOutputStream

2. 读取流中的数据,字节缓冲输入流 BufferedInputStream

它们的内部都包含了一个缓冲区,通过缓冲区读写,就可以提高了IO流的读写速度

2.1字节缓冲输出流 BufferedOutputStream类

public class BufferedOutputStreamDemo01 {
    public static void main(String[] args) throws IOException {

        //写数据到文件的方法
        write();
    }

    /*
     * 写数据到文件的方法
     * 1,创建流
     * 2,写数据
     * 3,关闭流
     */
    private static void write() throws IOException {
        //创建基本的字节输出流
        FileOutputStream fileOut = new FileOutputStream("abc.txt");
        //使用高效的流,把基本的流进行封装,实现速度的提升
        BufferedOutputStream out = new BufferedOutputStream(fileOut);
        //2,写数据
        out.write("hello".getBytes());
        //3,关闭流
        out.close();
    }
}

2.2字节缓冲输入流 BufferedInputStream类

private static void read() throws IOException {
        //1,创建缓冲流对象
        FileInputStream fileIn = new FileInputStream("abc.txt");
        //把基本的流包装成高效的流
        BufferedInputStream in = new BufferedInputStream(fileIn);
        //2,读数据
        int ch = -1;
        while ( (ch = in.read()) != -1 ) {
            //打印
            System.out.print((char)ch);
        }
        //3,关闭
        in.close();
    }

练习题:利用缓冲字节流复制文件

package com.oracle.demo02;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

//缓冲字节流
public class BufferCopy {

    public static void main(String[] args) throws IOException {
        long time1=System.currentTimeMillis();
        //1.确定数据源
        FileInputStream fis=new FileInputStream("e:\\java\\eclipse.zip");
        BufferedInputStream bis=new BufferedInputStream(fis);
        //2.确定目标地
        FileOutputStream fos=new FileOutputStream("d:\\java\\java\\dandan\\eclipse.zip");
        BufferedOutputStream bos=new BufferedOutputStream(fos);
        //3.读取与写入
        int len=0;
        byte[] bytes=new byte[1024];
        while((len=bis.read(bytes))!=-1){
            bos.write(bytes);
        }
        //4.刷新并释放资源
        bos.flush();
        bos.close();
        bis.close();
        long time2=System.currentTimeMillis();
        System.out.println("所用时间:"+(time2-time1)/1000+"秒");
    }

}

 三、字符缓冲流

1. 字符缓冲输入流 BufferedReader

2.  字符缓冲输出流 BufferedWriter

完成文本数据的高效的写入与读取的操作

3.1字符缓冲输入流BufferedReader类

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

特殊方法:

readLine() 读取一个文本行,包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null

package com.oracle.Demo01;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Demo02 {
//字符缓冲输入流
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        FileReader fr=new FileReader("e:\\java\\output.txt");
        BufferedReader br=new BufferedReader(fr);
        //读取一个文本行的方法      .readLine()   返回值为String  用null来控制循环
        //while循环方法读取
        String str=null;
        while((str=br.readLine())!=null){   //当返回值为null时,说明读取不到字符了
            System.out.println(str);
        }
        //普通方法读取
//        String str1=br.readLine();
//        System.out.println(str1);
//        String str2=br.readLine();
//        System.out.println(str2);
//        String str3=br.readLine();
//        System.out.println(str3);   //当读取不到内容时,会返回null
        br.close();
    }

}

3.2字符缓冲输出流BufferedWriter类

将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

特殊方法:

newLine() 根据当前的系统,写入一个换行符。

package com.oracle.Demo01;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Demo01 {
//字符缓冲输出流
    public static void main(String[] args) throws IOException {
        //1.确定目的地
        FileWriter fw=new FileWriter("e:\\java\\output.txt",true);
        //2.封装为字符缓冲流
        BufferedWriter bw=new BufferedWriter(fw);
        //3.写入数据
        bw.write("你好吗");
        bw.newLine();    //字符缓冲输出流,换行的方法:.newLine();
        bw.flush();
        bw.write("我很好");  //刷新流并不会关闭流,所以可以继续输出
        bw.close();

    }

}

练习题:利用缓冲流进行文件复制

package com.oracle.Demo01;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedCopy {
//缓冲字符流的复制
    public static void main(String[] args) throws IOException {
        //1.获取数据源
        FileReader fr=new FileReader("e:\\java\\output.txt");
        //2.封装成缓冲流
        BufferedReader br=new BufferedReader(fr);
        //3.获取目的地
        FileWriter fw=new FileWriter("e:\\java\\copy.txt",true);
        //4.封装成缓冲流
        BufferedWriter bw=new BufferedWriter(fw);
        //5.读取与写入
        String str=null;
        while((str=br.readLine())!=null){
            bw.write(str);
            bw.newLine();   //因为读取时是用文本行方法读取的,所以为了格式统一,需要加入换行方法
        }
        //6.释放资源
        bw.newLine();
        bw.close();
        br.close();
    }

}

原文地址:https://www.cnblogs.com/0328dongbin/p/9224997.html

时间: 2024-11-07 19:21:11

Java第三阶段学习(四、缓冲流)的相关文章

Java第三阶段学习(一、IO流------File类)

一.IO概述: 把内存中的数据存入到硬盘(持久化设备)中叫做:输出(写)Output操作.JAVA软件往电脑硬盘上走叫输出. 把硬盘中的数据读取到到内存里叫做:输入(读)Input操作.电脑硬盘上往JAVA软件里走叫输入. 以JAVA软件为参照物. 这种输入输出的动作叫做IO操作. 二.File类(文件类) 2.1定义:File是文件和目录(文件夹)路径名的抽象表现形式,即:JAVA把文件和目录都封装为File对象. 2.2构造函数: //File构造方法无法判定你写的这个文件是否真的存在 //

20165210 Java第三周学习总结

20165210 Java第三周学习总结 教材学习内容总结 - 第四章学习总结 编程语言的几个发展阶段: 面向机器语言 面向过程语言 面向对象语言 类: 类声明: class People { ... } class 动物 { ... } 类体: class People { 类体的内容 } class 动物 { 类体的内容 } 成员变量: 1. 类型: class Factory { float [] a; Workman zhang; } class Workman { double x;

201671010117 2016-2017-2 《Java程序设计》Java第三周学习心得

Java第三周学习心得 通过这一周的学习,了解到了Java的核心部分,理解了用户自定义类的定义 ,了解了对象的声明 ,了解了使用构造函数初始化对象 ,使用类属性与方法的使用,了解了package和import语句的用途,知道了假设你面对现实世界的一个对象,你不会把它的属性和处理方法分开,程序设计也是一样.面向对象程序设计(OOP):一种新的思维方法,更接近人类处理现实世界问题的自然表示方法.面向对象的语言有:C++,Smalltalk,Java等.面向对象程序设计的几个主要概念:抽象数据类型.类

Java第三阶段复习

Java第三阶段复习: 1. Spring 1. IOC: 定义:Inverse Of Controller:反转控制,将bean对象的创建和对象之间的关联关系的维护由原来我们自己创建.自己维护反转给了spring 的容器来创建bean对象及维护关联关系 解决:解决了上层建筑严重依赖下层建筑的问题,实现了上层建筑对下层建筑的控制 实现:DI[Dependency Injection], xml解析+反射+容器+设计模式 2. Aop: 定义:Aspect Oreinted Programming

JAVA笔记12__字节、字符缓冲流/打印流/对象流/

/** * !!:以后写流的时候一定要加入缓冲!! * 对文件或其它目标频繁的读写操作,效率低,性能差. * 缓冲流:好处是能更高效地读写信息,原理是将数据先缓冲起来,然后一起写入或读取出来. * * BufferedInputStream:字节缓冲流(有一个内部缓冲区数组,用于缓冲数据) */ public class Main { public static void main(String[] args) { input(); output(); } /** * 使用字节缓冲流进行读取操作

java第三天学习内容回顾——java白皮书第四章

java面向对象程序设计中使用到名词理解:对象标识==一个实例的变量名.对象行为==一个类的方法.对象状态==类中的数据域(严格讲是可以发生变化的数据域): 类之间的关系:use_a,has_a,is_a三种 java中的Math类有些特殊,它只封装了功能而并不涉及数据域,所以不需要也不必隐藏数据 java中的对象变量名更像是个指针(像),声明一个对象实例后必须用new构造对象然后用=将两者链接起来,也可以用=将两个不同的对象变量连接起来,但此时需要注意,就像指针赋值一样,两个变量自此将共享同一

Effective Java 第三版——46. 优先考虑流中无副作用的函数

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java

java第三周学习总结

学号20145336 <Java程序设计>第3周学习总结 教材学习内容总结 类与对象: 面向对象:三大特征:封装,继承,多态. 开发就是找对象使用,没有对象,就创建一份对象.找对象,建立对象,使用对象,维护对象的关系. 类和对象的关系: 类就是对心事生活中的食物的描述.对象就是这类事物,实实在在存在的个体. 描述对象事物的属性和行为 属性对应类中变量,行为对应类中的函数(方法) 其实定义类,就是描述事物,就是在定义属性和行为,属性和行为共同成为类中的成员(成员变量和方法) 对象的指定方式是对象

事件委托的三阶段学习

DOM2级事件规定的事件流的三个阶段:捕获,目标,冒泡 IE事件流 叫做事件冒泡,即事件开始时由最具体的元素(文档中嵌套最深的那个节点)接收,然后逐级向上(一直到文档).事件捕获与事件冒泡事件流正好相反的顺序,事件捕获的事件流是最外层逐级向内传播. 事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件. 也就是:利用冒泡的原理,把事件加到父级上,触发执行