缓冲流:

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

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

字节输出缓冲流:

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. Hibernate 再接触 事务隔离机制

    事务:要么都要完成,一个不完成就要回滚. ACID 原子性 一致性 独立性 持久性 第一类丢失更新 第一类丢失更新 脏读(读了另外一个事务没有提交的数据) 不可重复读(在同一个事务里,对数据库里的值前 ...

  2. python中安装request模块

    使用命令行(cmd)进入到python安装目录下的Scripts文件夹(也可以先进入目标文件夹然后在文件路径上打开cmd回车即可) 在命令行中输入pip install requests,等待安装完成 ...

  3. nlp算法工程师养成记 目标要求

    时间规定: 2018.12.07-2018.02.15 能力养成: linux, shell python, c++(会多少算多少) tensorflow, keras, pytorch(tf优先) ...

  4. 11. Container With Most Water (JAVA)

    Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). ...

  5. 186. Reverse Words in a String II 翻转有空格的单词串 里面不变

    [抄题]: Given an input string , reverse the string word by word. Example: Input: ["t"," ...

  6. pythone函数基础(10)MD5加密

    导入hashlib模块import hashlibs='yulin123456's.encode()#把数字转换成bytes类型m=hashlib.md5(s.encode())print(m.hex ...

  7. java_20 LinkedList类

    LinkedList类特有的方法 (1)addLast()  将指定元素添加到此列表的结尾. addFirst() 将指定元素添加到此列表的开始. public static void main(St ...

  8. 50-用Python监听鼠标和键盘事件

    转自:https://www.cnblogs.com/qiernonstop/p/3654021.html 用Python监听鼠标和键盘事件 PyHook是一个基于Python的“钩子”库,主要用于监 ...

  9. thinkphp 视图(二)变量输出、赋值和替换

    view下的html文件会编译成php文件 编译的文件在runtime 下的temp目录 <p>{$email}</p> 会编译成 <?php echo $email; ...

  10. 指定某个方法在站点的Application_Start之前执行

    指定某个函数方法在站点的Application_Start之前执行:PreApplicationStartMethodAttribute 先预备一个类,用于Start时调用 public static ...