输出流中的写入(write)和输入流中的读取(read)

写入和写出概述

——写入和读取是相对于我们的程序来说的

从外界读取数据到我们的程序叫做输入

从我们的程序写入数据到外界叫做输出

输入流只能读取数据,而不能写入

输出流只能写入数据,而不能读取

可以说输入流和输出流在这方面是互斥的

read方法是拿来读取文件的

write是拿来写入数据的

对于输入流中的read(byte[], off, len)方法:

byte[] bytes = new byte[5];// 这边是随意定义的一个数组

bytes是字节数组,off是读取的起始下标,len是指从读取的起始下标开始要读的长度,

若要从off开始读取到字节数组末尾,则可以填写为read(bytes,off,bytes.length-off)。

同理得,对于输出流中的write(bytes, off, len)方法:

它从bytes数组的bytes[off]往下读取数据,算上自身总共读取len长度的数据。

若要对读取的内容进行输出,通过字节数组存放读取内容再将其转换为字符数组的方法是比较简洁,比较方便的。下面是读取文件的操作。

package io流.i;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Demo1112 {
    public static void main(String[] args) throws IOException {
        FileInputStream inp = new FileInputStream("./写来写去.txt");
        byte[] bytes = new byte[1024];
        int count = 1;
        int len;
        while ((len = inp.read(bytes)) != -1) {
            System.out.printf("第%d次读取了%d个字节\n",count++,len);
            System.out.println(new String(bytes, 0, len));
        }
        inp.close();
        System.out.println("===========");
        for(byte i : bytes) {
            if(i=='\n') System.out.print("\\n");
            if(i=='\r') System.out.print("\\r");
        }

    }
}

 由此可见,记事本中的换行是用到两个字符的,也就是"\r\n"。

接下来是复制图片操作

package io流.i;

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

public class Demo1024 {
    public static void main(String[] args) throws IOException {
        FileInputStream inp = new FileInputStream("C:\\Users\\Administrator\\Desktop\\0.0\\图片.png");
        FileOutputStream out = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\0.0\\1\\1.png");
        byte[] bytes = new byte[1024];
        int len;
        int a = 0;// 计数器,看重复写入了多少次
        while((len=inp.read(bytes))!=-1) {
            System.out.println(a++);
            out.write(bytes,0,len-0);
            // 这里必须写len-0次,而不能写bytes.length次,因为最后面len<bytes.length,\
            从len到bytes.length这一段是上一次读取到的内容(用read把数据存入数组的话,\
            其原理相当于赋值操作,赋值到len的时候就结束了。而最后一次赋值到len结束,\
            从len到length这一段的数据仍是上一次读取的数据)
        }
        inp.close();
        out.close();
        System.out.println("录入完毕");
    }
}

字节流可以复制任何类型的文件

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值