Java中字节 输入流一次读取多个字节代码实现和原理-图文分析

字节输入流一次读取多个字节的方法

int read​(byte[] b) 从该输入流读取最多 b.length个字节的数据到一个字节数组

明确两件事情:

1、方法的参数byte[] 的作用

                      起到缓冲作用,存储每次读取到的多个字节

                       数组的长度定义为1024(1kb)或者是1024的整数倍

2、方法的返回值int是什么?

                      每次读取的有效字节个数

String类的构造方法之一

String​(byte[] bytes)

通过使用平台的默认字符集解码指定的字节数组来构造新的 String

作用:把字节数组转换为字符串

String类的构造方法之二

String​(byte[] bytes, int offset, int length)

通过使用平台的默认字符集解码指定的字节子阵列来构造新的 String

 作用:把字节数组的一部分转换为字符串

构造参数的作用

int offset:数组的开始索引

int length:转换的字节个数

============

约定文件路径及文件内容,如图:

字节 输入流一次读取多个字节

package com.baidu.字节输入输出流;



import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;

public class InputStream02 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("F:\\develop\\d.txt");
        byte[] bytes1 = new byte[2];
        int read = fis.read(bytes1);
        System.out.println(read);//打印2 每次打印读取的个数是2
        System.out.println(Arrays.toString(bytes1));//[65, 66]
        System.out.println(new String(bytes1));//AB


        read = fis.read(bytes1);
        System.out.println(read);
        System.out.println(new String(bytes1));


        read = fis.read(bytes1);
        System.out.println(read);//读到1 ,这说明读到了一个有效字节数
        System.out.println(new String(bytes1));


        read = fis.read(bytes1);
        System.out.println(read);//读到-1 ,这说明读到了结束标记
        System.out.println(new String(bytes1));//因为我们定义的是两个字节数组,所以即使返回-1也必然是返回两个字母

        fis.close();
    }
}

程序结果:

 

发现以上读取的是一个重复的过程,可以使用循环优化

不知道文件有多少字节,可以使用while循环

while循环结束条件,读取到-1结束

字节 输入流一次读取多个字节(优化升级,使用while循环)String​(byte[] bytes)


Java中字节 输入流一次读取多个字节代码实现和原理-图文分析
31/100
Attsky


<没有设置>
package com.baidu.字节输入输出流;



import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;

public class InputStream02 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("F:\\develop\\d.txt");


        byte[] bytes = new byte[1024];//存储读取到的多少字节
        int len = 0;
        while((len=fis.read(bytes))!=-1){
            System.out.println(bytes);//可打印数组的地址值,这个程序中没有意义
            System.out.println(new String(bytes));//转换成字符串,用到了String的构造方法,匿名

        }
       

        //释放资源
        fis.close();
    }
}

 

 字节 输入流一次读取多个字节(优化升级,使用while循环)String​(byte[] bytes, int offset, int length)

package com.baidu.字节输入输出流;



import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;

public class InputStream02 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("F:\\develop\\d.txt");


        byte[] bytes = new byte[1024];//存储读取到的多少字节

       int len = 0;
        while((len=fis.read(bytes))!=-1){
            System.out.println(bytes);//可打印数组的地址值,这个程序中没有意义
            System.out.println(new String(bytes,0,len));//转换成字符串,用到了String的构造方法,匿名

        }

        //释放资源
        fis.close();
    }
}

数组的默认值是0

数组的下标是从1开始的

 

数组:缓存作用,存储读到的多个字节

new byte[5]:一次读取5个字节,可提高读取效率

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值