字节输入流(InputStream)与字节输出流(OutputStream)

怎么确定输入输出的方向?

  字节流输入输出的方向是以Java为标准的。我们可以把文件和Java虚拟机之间想象成有一条通道。数据在通道中流通,这就有了输入流和输出流。当程序要读取文件的时候,调用程序把文件传入java虚拟机,这是输入流;当程序要向文件写入数据的时候,数据就会从Java虚拟机中流向文件,这就是输出流。
在这里插入图片描述

字节输入流(InputStream)

  InputStreams是Java标准库提供的最基本的输入流,位于java.io包里。它不是一个具体的类或者接口,而是一个抽象类。同时它是所有字节输入流的父类。
  如何使用字节输入流(InputStream)???

//因为InputStream是抽象类,所以使用时要引用子类的地址
InputStream fis = new FileInputStream("F:\\test1.txt");//括号内为文件路径

案例1

//一次只读取一个字节的方法
public static void demo1() throws IOException {
        //1、把外部文件创建为一个输入流对象
        InputStream fis = new FileInputStream("F:\\aa\\test.txt");
        //2、在Java中把输入流的字节读取出来
        int date;
        while ((date=fis.read()) != -1){
            System.out.print((char) date);//转为字符型输出
        }
    }
//一次读取多个字节的方法
public static void demo2() throws IOException {
    InputStream fis = new FileInputStream("F:\\test1.txt");
    byte[] b = new byte[4];//设置中转站,一次可以读4个字节
    int date;
    while ((date=fis.read(b))!= -1){
        System.out.println(new String(b));//字节数组转为字符串输出
        b = new byte[4];//清空中转站
    }
}
//一次全部读完的方法
public static void demo3() throws IOException {
    InputStream fis = new FileInputStream("F:\\test1.txt");
    byte[] b = new byte[fis.available()];//available()方法可以一次获取全部长度
    fis.read(b);//把读的内容存入字节数组b中
    System.out.println(new String(b));//将字节数组转化为字符串
}
//测试代码
public static void main(String[] args) {
    try {
        demo1();//调用的方法
    } catch (IOException e) {
        e.printStackTrace();
    }
}

字节输出流(OutputStream)

  OutputStream是Java标准库提供的最基本的输出流,位于java.io包里。它不是一个具体的类或者接口,而是一个抽象类。同时它是所有字节输入流的父类。
  如何使用字节输出流(OutputStream)???

//因为OutputStream是抽象类,所以使用时要引用子类的地址
OutputStream outputStream  =  new FileOutputStream("F:\\aa.txt",true);//默认false,此时写入会覆盖原有的内容。true是追加,不会覆盖原有内容。
public static void dem() throws IOException {
    OutputStream out = new FileOutputStream("F:\\aa.txt",true);
    String ss = "断肠人在天涯";
    byte[] bytes = ss.getBytes();//getBytes()方法把字符串转为字节数组
    out.write(bytes);
}
//测试代码
public static void main(String[] args) {
    try {
        dem();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值