javase:IO字节流

输入/出字节流

输入输出字节流:(InputStream,OutputStream)

字节流根类都是抽象类

API

①Int read();从流中读取一个字节,返回值为int类型,读取数据占低八位,高24为0,进行无符号扩展
②void write(int b)把一个字节写入到流中(把int类型的低八位)
③void close()关闭管道流

文件输入/出字节流

文件流

①FileInputStream 文件输入流
②FileOutputStream文件输出流

特点

文件流是节点流,直接可以操作磁盘的文件

节点流概念

能够介质(文件、网络、控制台)直接相连的流

ByteArray字节流

byte字节流

①ByteArrayInputStream比特数组输入流
②ByteArrayOutPutStream比特数组输出流

特点

包含一个缓冲区,该缓冲区存储从流中读取的数据

API

①ByteArrayInputStream(byte[] buf)
②ByteArrayInputStream(byte[] buf,int offset,int length)

Demo1

package IODemo;

/*
   文件拷贝
 */

import java.io.*;

public class ByteArrayDemo {

    public static void main(String[] args) throws IOException {

        //1.创建一个文件管道流
        FileInputStream fis = new FileInputStream("C:\\Users\\Gypsophila\\Desktop\\picture.bmp");

        //2.创建一个文件输出流
        FileOutputStream fos = new FileOutputStream("C:\\Users\\Gypsophila\\Desktop\\background.bmp");

        //3.创建数组管道流
        ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);

        //4.定义数组
        byte[] data = new byte[1024];

        while(true){
            //5.读取数据
            int len = fis.read(data);

            //7.跳出
            if(len == -1){
                break;
            }

            //6.写数据
            bos.write(data,0,len);
        }

        bos.writeTo(fos);
        //8.关闭管道
        fis.close();
        fos.close();
        bos.close();
    }

}

Demo2

package IODemo;



import java.io.*;

public class ByteArrayDemo2 {

    public static void main(String[] args) throws IOException {

        String str = "爱神的箭安徽的撒,按时段和。阿萨德还是";

        //1.创建一个内存管道流
        ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes());

        //2.创建一个文件输出流
        FileOutputStream fos = new FileOutputStream("C:\\Users\\Gypsophila\\Desktop\\1.txt");

        //3.创建数组管道流
        ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);

        //4.定义数组
        byte[] data = new byte[1024];

        while(true){
            //5.读取数据
            int len = bis.read(data);

            //7.跳出
            if(len == -1){
                break;
            }

            //6.写数据
            bos.write(data,0,len);
        }

        bos.writeTo(fos);
        //8.关闭管道
        bis.close();
        fos.close();
        bos.close();
    }

}

Data字节流

①构造:DataInputStream 数据输入流 DataOutputStream 数据输出流
②特点:读取数据就是java的数据类型,属于处理流

package IODemo;
/*
    文件拷贝
 */
import java.io.*;
public class DataStreamDemo {
    public static void main(String[] args) throws IOException {
        /*//1.创建文件管道流
        FileInputStream fis = new FileInputStream("C:\\Users\\Gypsophila\\Desktop\\background.bmp");
        //2.创建数据管道流
        DataInputStream dis = new DataInputStream(fis);*/

        //1.创建输出管道流
        DataInputStream dis = new DataInputStream(new FileInputStream("C:\\Users\\Gypsophila\\Desktop\\background.bmp"));

        //2.创建输出管道流
        DataOutputStream dos = new DataOutputStream(new FileOutputStream("C:\\Users\\Gypsophila\\Desktop\\1.bmp"));

        //3.边读边写
        byte[] b = new byte[1024];
        while(true){
            int len = dis.read(b);
            if(len ==-1){
                break;
            }
            dos.write(b,0,len);
        }
        //4.关闭通道
        dis.close();
        dos.close();
    }
}

缓冲字节流

①构造:BufferedInputStream 缓冲输入字节流
BufferedOutputStream 缓冲输出字节流
②特点:
A:处理流,一边和程序连接,一边和修饰流或者字节流连接,不能直接,面对外部介质(文件,网络)
B:缓冲流中的缓冲区为了提高读取或写入的效率,将读取或者写入的文字暂时存储在缓冲区,当缓冲区满了之后,一起将数据读出或者写入,减少写入的次数
③API

package IODemo;

/*
    BufferedInputStream
    BufferedOutputStream  读取效率高,存在缓冲区
 */

/*
    实现文字拷贝
 */

import java.io.*;

public class BufferStreamDemo {

    public static void main(String[] args) throws IOException {
        //1.创建一个输入流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\Users\\Gypsophila\\Desktop\\test.txt"));

        //2.创建一个输出流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\Users\\Gypsophila\\Desktop\\test1.txt"));

        //3.边读边写
        byte[] data = new byte[1025];
        while(true){
            int len = bis.read(data);
            if(len == -1){
                break;
            }
            bos.write(data,0,len);
            bos.flush();//当缓冲区满时会自动刷出
        }
        //4.关闭流
        bis.close();
        bos.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值