您的位置:首页 > 其它

字节流 缓冲流 数据流

2015-08-03 20:01 190 查看
1、字节流

先了解流的概念

流分为输入流和输出流,一个对象的输入流是指从外界到这个对象的流,输出流则是从这个对象到它的外界的流。

例如:对于一个JAVA程序来说,它是运行在JVM(JAVA虚拟机)中的的,如果它想要从硬盘中读取文件,就要用到它的输入流,JVM通过向操作系统提出请求来获得输入流,以将磁盘中的文件内容传入到程序中。

而写入磁盘或者从磁盘中读取是通过读写字节或者读int型数据实现的。

这种以字节形式读写的流对象成为字节流。

2、缓冲流

操作系统读取在Buffer中读取一定的字节数据之后再传递给JVM,这就是缓冲。

3、数据流

这种流会在画图保存这篇博客中讲到,这里就不说了。

最后奉上字节流和缓冲流的代码:

package ch0801;

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

public class IODemo{

public static void main(String[] args){
//FileIO("src\\ch0801\\write.txt","src\\ch0719\\writeTo.txt"); 这样的路径貌似有问题
FileIO("F:\\test.txt","D:\\writeTo.txt"); //可以运行,通过多次运行可以发现每次写入都会覆盖之前的内容
BufferIO("D:\\writeTo.txt","E:\\writeToo.txt"); //可以运行
}

/*
* 字节流的使用
* path 读取的路径
* newPath 写入的路径
*/
public static void FileIO(String path,String newPath){ //定义为Static不用再对象中调用,使用起来比较方便
try{
//step1.创建输入输出流
FileInputStream fis = new FileInputStream(path);
FileOutputStream fos = new FileOutputStream(newPath);
//step2.创建承载字节内容的字节数组
byte[] array = new byte[fis.available()];//available()用来获取读取内容的大小
//step3.从目标路径读取文件信息
fis.read(array);
//还有另外几种读取写入方式
//方式一.
//              int i;
//              while((i=fis.read())!=-1){ //如果没有读到最后
//                  fos.write(i);
//              }
//方式二.
//              while(fis.available()>0){ //如果还有内容可读取
//                  i = fis.read();
//                  fos.write(i);
//              }
//step4.将读取到的文件信息写入到指定路径
fos.write(array);
//step5.关闭输入输出流
fis.close();
fos.close();
}catch(Exception e){
e.printStackTrace();//输出堆栈信息
}
}

/*
* 缓冲流
* 缓冲流是什么?首先要清楚我们运行JAVA程序是在JVM中运行的
* 一个在硬盘中读取文件的过程是怎样的?
* 1.JVM向操作系统提出请求
* 2.操作系统读取硬盘中的文件
* 3.操作系统将文件递交给JVM供JAVA程序使用
* 如果操作系统读取一定量的文件后再交给JAVA程序,就使用了缓冲,一般来说,缓冲流的读取速度会比字节流要快
*/

public static void BufferIO(String path,String newPath){
try {
//Step1.创建缓冲输入、输出流对象
FileInputStream fis = new FileInputStream(path);
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream(newPath);
BufferedOutputStream bos = new BufferedOutputStream(fos);
//Step2.创建字节数组
byte[] array = new byte[bis.available()];
//Step3.读取并写入
bis.read(array);
bos.write(array);
//Step4.关闭输入输出流
bis.close();
bos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

/*
* 数据流的使用
* 具体可以使用于画图板、五子棋的保存
*/

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: