缓冲流:

在读写文件的各种流中,最令人烦恼的就是效率问题,

而缓冲流的目的就是提高读写效率

字节输出缓冲流:

package demo;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException; //提高写入效率
public class BufferedOutputStreamDemo {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("d:\\buffer.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write(66);
byte[] bytes = "HelloWorld".getBytes();
bos.write(bytes);
bos.close();
}
}

字节输入缓冲流:

package demo;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException; public class BufferedInputStreamDemo {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("d:\\buffer.txt"));
byte[] bytes = new byte[10];
int len = 0;
while ((len = bis.read(bytes)) != -1) {
System.out.print(new String(bytes, 0, len));
}
bis.close();
}
}

可以利用缓冲流复制文件,和以前的方法做对比:

并且比较下复制时间

package demo;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class Copy {
public static void main(String[] args) throws IOException {
long s = System.currentTimeMillis();
copy1(new File("d:\\LOL.exe"), new File("e:\\LOL.exe"));
long e = System.currentTimeMillis();
System.out.println(e - s);// 复制了14154毫秒(14秒) copy2(new File("d:\\LOL.exe"), new File("e:\\LOL.exe"));
// 同样的方法测试时间:129毫秒(0.1秒) copy2(new File("d:\\LOL.exe"), new File("e:\\LOL.exe"));
// 测试时间:94毫秒(不到0.1秒)
} public static void copy1(File src, File desc) throws IOException {
FileInputStream fis = new FileInputStream(src);
FileOutputStream fos = new FileOutputStream(desc);
int len = 0;
while ((len = fis.read()) != -1) {
fos.write(len);
}
fos.close();
fis.close();
} public static void copy2(File src, File desc) throws IOException {
FileInputStream fis = new FileInputStream(src);
FileOutputStream fos = new FileOutputStream(desc);
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
fos.close();
fis.close();
} public static void copy3(File src, File desc) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desc));
int len = 0;
byte[] bytes = new byte[1024 * 10];
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
bos.close();
bis.close();
}
}

字符缓冲输出流:

package demo;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException; public class BufferedWriterDemo{
public static void main(String[] args) throws IOException {
write();
}
public static void write() throws IOException{
FileWriter fw = new FileWriter("d:\\buffer.txt");
BufferedWriter bfw1 = new BufferedWriter(fw);
bfw1.write(100);
bfw1.flush();
bfw1.write("你好".toCharArray());
bfw1.newLine();//特有换行方法
//可以用\r\n换行,不过建议使用这种方法,具有平台无关性
bfw1.flush();
bfw1.write("HelloWorld");
bfw1.flush();
bfw1.close();
}
}

字符缓冲输入流:

package demo;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException; public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
read();
} public static void read() throws IOException {
int LineNumber = 0;
BufferedReader bfr1 = new BufferedReader(new FileReader("d:\\read.txt"));
// 缓冲流特有方法,读取文本单行
String line = null;
while ((line = bfr1.readLine()) != null) {
LineNumber++;
System.out.println("第" + LineNumber + "行的内容:" + line);
}
bfr1.close();
}
}

字符缓冲流复制文本文件:

package demo;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; public class Copy {
public static void main(String[] args) throws IOException {
BufferedReader bfr1 = new BufferedReader(new FileReader("d:\\read.txt"));
BufferedWriter bfw1 = new BufferedWriter(new FileWriter("e:\\read.txt"));
String line = null;
while ((line = bfr1.readLine()) != null) {
bfw1.write(line);
bfw1.newLine();
bfw1.flush();
}
bfw1.close();
bfr1.close();
}
}

关于各种流的操作规律和选用:

1.明确是要读取还是写入(源和目的)

2.明确是要操作什么类型的,字节还是文本?

3.明确数据所在的设备,在硬盘中还是内存中,或者是网络?(这里还没有介绍内存流和socket)

4.是否需要编码转换,需要利用缓冲流、数组提高效率码?

Java学习笔记40(缓冲流)的更多相关文章

  1. 6.3(java学习笔记)缓冲流

    一.缓冲流 使用缓冲流后的输入输出流会先存储到缓冲区,等缓冲区满后一次性将缓冲区中的数据写入或取出. 避免程序频繁的和文件直接操作,这样操作有利于提高读写效率. 缓冲流是构建在输入输出流之上的,可以理 ...

  2. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

  3. 6.5(java学习笔记)其他流(字节数组流,数据流,对象流,打印流)

    一.字节数组流 之前使用输入输出流的操作的对象是文件,而这里字节数组流操作的对象是内存,内存可以看做是一个字节数组. 使用字节数组流读写就可以看做是从内存A到内存B的读写,对象时内存即字节数组. 1. ...

  4. 6.4(java学习笔记)转换流

    一.乱码问题 我们来看下列例子: public class ConStream { //当前平台默认采用GBK public static void main(String[] args){ Stri ...

  5. Java学习笔记——I/O流常用类之间的继承关系及构造方法

    朝辞白帝彩云间,千里江陵一日还. 两岸猿声啼不住,轻舟已过万重山. ——早发白帝城 总结一下有哪些I/O流: 输入流方法主要是read()和close(),输出流方法主要是write().flush( ...

  6. Java学习笔记——I/O流

    朝辞白帝彩云间,千里江陵一日还.两岸猿声啼不尽,轻舟已过万重山. --早发白帝城 我们老师写代码有个特点,就是简洁.每一句的意图都十分明确.所以他讲课的速度也比较快. 跑题了,说说I/O流: 1.字节 ...

  7. java学习笔记之字符流文件复制

    字符文件复制 FileReader fr =new FileReader("b.txt");//绑定源文件 FileWriter fw= new FileWriter(" ...

  8. Java学习笔记40(sql:将数据库内数据存入对象中)

    新建一个数据表: use qy97; create table student( id int primary key auto_increment, sname ), gander ), age i ...

  9. Java学习笔记-10.io流

    1.输入流,只能从中读取数据,而不能向其写出数据.输出流,只能想起写入字节数据,而不能从中读取. 2.InputStream的类型有: ByteArrayInputStream 包含一个内存缓冲区,字 ...

随机推荐

  1. JS 高级总结

    一.查找HTML元素 通常,通过 JavaScript,您需要操作 HTML 元素. 1.通过 id 找到 HTML 元素 2.通过标签名找到 HTML 元素 3.通过类名找到 HTML 元素 提示: ...

  2. windows nodejs yarn 与hadoop yarn命令冲突

    添加环境变量后 修改名字 1.修改前: 2.修改后:

  3. Swagger使用

    Swagger 1.集成springboot 第一步:pom <dependency> <groupId>io.springfox</groupId> <ar ...

  4. LR基础理论详解

    本人参考了大神的博客(https://blog.csdn.net/cyh_24/article/details/50359055),写的非常详细,在此整理一下要点 逻辑斯蒂分布 基础公式了解 二项逻辑 ...

  5. effector - 必应词典

    effector - 必应词典 美[ɪ'fektə(r)]英[ɪ'fektə(r)] n.效应物 网络效应器:效果器:受动器 变形复数:effectors:

  6. Dart 基础重点截取 Dart 2 20180417

    官网教程 https://www.dartlang.org/guides/language/language-tour dart是一个单线程的语言,没有多线程 Final and const If y ...

  7. [leetcode]38. Count and Say数数

    The count-and-say sequence is the sequence of integers with the first five terms as following: 1. 1 ...

  8. unity3d 代码动态添加,修改BoxCollider2D

    BoxCollider2D box = gameObject.AddComponent<BoxCollider2D>(); box.size = new Vector2(1.0f, 1.0 ...

  9. MySQL开发——【联合查询、多表连接、子查询】

    联合查询 所谓的联合查询就是将满足条件的结果进行拼接在同一张表中. 基本语法: select */字段 from 数据表1 union [all | distinct] select */字段 fro ...

  10. Python列表详解

    #列表:增,删,改,查.names=['N0','N1','N2',['EX1','EX2'],'N3'] '''#------------------------------------------ ...