设为首页 加入收藏

TOP

Java 带缓冲的字节流和字符流
2018-08-31 18:27:12 】 浏览:168
Tags:Java 缓冲 节流 字符

输入流就是文件从硬盘到内存的中间媒介,那么输出流就是文件从内存到硬盘的中间媒介。首先来看看FileOutputStream的继承了哪些类,


java.lang.Object


 java.io.OutputStream


 java.io.FileOutputStream


具体该类如何实现,我们还是结合以下代码来看。


 
import java.io.*;
public class FileOutputStreamTest01{
 public static void main(String[] args)throws Exception{
  FileOutputStream fos=null;
  try{
  //1.创建输出流
  fos=new FileOutputStream("temp02");
  //fos=new FileOutputStream("temp02",true);  以追加的形式写入
  //2.写入
  //准备要写入的字符串
  String str="hello,world!";
  //将字符串转换为byte类型
  byte[] bytes=str.getBytes();
  fos.write(bytes); //将byte数组中的所有内容写入
  //fos.wirte(bytes,0,3);
  //最后为了保证数据完全写入数组,刷新
  fos.flush();
  }catch(Exception e){
    e.printStackTrace();
  }finally{
    if (fos!=null){
    //关闭文件
    fos.close();
    }
    }
 }
}


1.首先创建输出流,FileOutputStream fos=new FileOutputStream("文件名");  这种形式的以覆盖方式输出,也就是你第一次写入一些内容,第二次再写入,打开后只能看见第二次写入的内容。那么如何以追加的形式写入呢?打开jdk帮助文档,我们找到FileOutputStream类,看里面的构造方法,


public FileOutputStream(String name, boolean append) throws FileNotFoundException


看jdk里的帮助文档的解释:创建文件输出流以指定的名称写入文件。 如果第二个参数是true ,则字节将写入文件的末尾而不是开头,也就是只要你写入内容到文件中,都会在文件保存。


2.来看写入的方法。jdk帮助文档中,write(byte[] b); 将 b.length个字节从指定的字节数组写入此文件输出流。程序中,首先准备要写入的字符串,String str="hello,world!"; 然后将字符串转换为数组形式,byte[] bytes=str.getBytes(); 使用write(byte[] b); 的方式写入。


3.安全起见,往文件里写入数据时都需要刷新,并且要记得关闭流。


在IO包中提供两个带缓冲的字节流,分别是BufferedInputStream和BufferdOutputStream,这两个流都使用了装饰设计模式。它们的构造方法中分别接收InputStream和OutputStream类型的参数作为被包装对象,在读写数据时提供缓冲功能。为了提高效率也可以定义一个字节数组作为缓冲区。在拷贝文件时,可以一次性读取多个字节的数据,并保存在字节数组中,然后将字节数组中的数据一次性写入文件。同样带缓冲的字符流BufferedReader和BufferedWriter实现的功能也相同。看以下带缓冲的字符输入流和输出流的实现方法。


带缓冲的字符输入流:


import java.io.*;
public class BufferedReaderTest01{
 public static void main(String[] args)throws Exception{
  //创建一个带有缓冲区的字符输入流
  FileReader fr=new FileReader("BufferedReaderTest01.java");
  //BufferedReader br=new BufferedReader(Reader);
  BufferedReader br=new BufferedReader(fr);
  //BufferedReader br=new BufferedReader(new FileReader("BufferedReaderTest01.java"));
    String temp=null;
  //按文本的一行开始读
  //br.readLine()读取读一行,但是行尾不带换行符
  while((temp=br.readLine())!=null){
    System.out.println(temp);
  }
  //关闭的时候只需关闭最外层的包装流
  br.close();
 }
}


带缓冲的字符输出流:


import java.io.*;
public class BufferedWriterTest01{
 public static void main(String[] args)throws Exception{
  BufferedWriter bf=new BufferedWriter(new FileWriter("temp004"));
  bf.write("奥运会!");
  bf.newLine();
  bf.write("体现了中国的传统文化");
  bf.close();
 }
}


字符流一次读入一个数组的速度明显比一次读入一个字符的速度快很多,这是加入了数组这样的缓冲区效果,Java本身在设计的时候,也考虑了这样的设计思想,所以提供了字节缓冲区流和字符缓冲区流。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java 异常的处理方式--throws和tr.. 下一篇你知道Java的四种引用类型吗

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目