字节流 缓冲流 数据流

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();
        }
    }

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



}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值