1、字节输入流——硬盘中数据写出到内存中供解析使用:
根据文件存储原理,8位二进制组成为一个字节,换算后的数值在0-127则查询ASCII码表,其他则查询系统默认表,如简体中文查询GBK表;
2、FileInputStream文件字节输入流:
3、FileInputStream使用实例:
其中,每次调用read方法指针后移一位;最后返回值为-1,继续读一直是-1;
当长度即元素数量已知时候(点size() 或者 点length() )使用for循环,有索引的可以使用for each 也可以用普通for循环(初始化表达式; 步进表达式; 布尔表达式),
没有索引的时候只能使用增强for循环及for each;
当长度即元素数量未知时候,使用while循环,括号里是布尔表达式即循环条件即循环结束条件;
若while括号中的条件布尔表达式不用变量接收再判断的话:
运行结果:
其中,while括号中的条件布尔表达式不用变量接收直接进行判断的话,会少值,因为每次执行FileInputStream方法时候,指针都在后移一位;
前者使用变量接收,输出打印变量,只执行了一次read()方法;
后者执行了两次read()方法;
4、InputStream从硬盘写出数据到内存然后读取的原理:
其中红色指针一直在向后移动;
windows系统和linux系统的结束标记不一样,但通过java虚拟机jvm处理返回到程序里面都是-1;
5、InputStream一次读取多个字节:
其中,数组存放读取的字节,缓冲作用;
数组的值一直在动态变化;
重复操作使用循环优化:
其中,因为不知道 FileInputStream fis 对象的大小(length 或者 size),使用while循环;
运行结果:
除了字符串的值,后面还有很多空格,创建的长度为1024(kb)的数组,转换为字符串时候产生的后面没有用到空格;
优化:使用String的另外一个带索引截取固定长度的构造方法: