字节流_FileInputStream类读取
来源:互联网 发布:淘宝拍衣服的要求 编辑:程序博客网 时间:2024/05/16 12:58
File类:用于描述一个文件或者文件夹的。
通过File对象我们可以读取文件或者文件夹的属性数据,如果我们需要读取文件的内容数据,那么我们需要使用IO流数技术。
IO流(Input Output)
IO技术主要的作用是用于解决设备与设备之间的数据传输问题。比如:硬盘-->内存 内存的数据-->硬盘上 把键盘的数据-->内存中
IO流分类:
如果我们按照数据的流向划分:
输入流:
输出流:
如果按照处理的单位划分:
字节流:字节流读取的都是文件中的二进制数据,读取到的二进制数据不会经过任何的处理。
字符流:字符流读取的数据是以字符为单位的。字符流也是读取文件中的二进制数据,不过会把这些二进制数据转换成我们能识别的字符。
字符流 = 字节流 + 解码
判断使用输入流还是输出流的依据:
以当前程序作为参照物,观察数据是流入还是流出,如果流出则使用输出流,如果流入则使用输入流。
输入字节流:
-------------| InputStream 此抽象类是表示字节输入流的所有类的超类。
------------------| FileInputStream 从文件系统中的某个文件中获得输入字节。
使用FileInputStream读取文件数据的步骤:
1.找到目标文件
2.建立数据的输入通道
3.读取文件中的数据
4.关闭资源,实际上就是释放资源
推荐使用方式4读取:使用缓冲数组 + 循环 配合读取。注意事项:
1.资源文件一旦使用完毕,应该立即释放资源文件
2.读取文件时,循环读取时,缓冲数组每次都是覆盖,并不是先清空再读取。所以应该采用new String(buff, 0, length)方法而不是new String(buff)
package com.cn.input;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* Author:Liu Zhiyong(QQ:1012421396)
* Version:Version_1
* Date:2016年7月24日16:49:24
* Desc:
File类:用于描述一个文件或者文件夹的。
通过File对象我们可以读取文件或者文件夹的属性数据,如果我们需要读取文件的内容数据,那么我们需要使用IO流数技术。
IO流(Input Output)
IO技术主要的作用是用于解决设备与设备之间的数据传输问题。比如:硬盘-->内存 内存的数据-->硬盘上 把键盘的数据-->内存中
IO流分类:
如果我们按照数据的流向划分:
输入流:
输出流:
如果按照处理的单位划分:
字节流:字节流读取的都是文件中的二进制数据,读取到的二进制数据不会经过任何的处理。
字符流:字符流读取的数据是以字符为单位的。字符流也是读取文件中的二进制数据,不过会把这些二进制数据转换成我们能识别的字符。
字符流 = 字节流 + 解码
判断使用输入流还是输出流的依据:
以当前程序作为参照物,观察数据是流入还是流出,如果流出则使用输出流,如果流入则使用输入流。
输入字节流:
-------------| InputStream 此抽象类是表示字节输入流的所有类的超类。
------------------| FileInputStream 从文件系统中的某个文件中获得输入字节。
使用FileInputStream读取文件数据的步骤:
1.找到目标文件
2.建立数据的输入通道
3.读取文件中的数据
4.关闭资源,实际上就是释放资源
推荐使用方式4读取:使用缓冲数组 + 循环 配合读取。
*/
public class Demo1 {
public static void main(String[] args) throws IOException {
//readTest1();
//readTest2();
//readTest3();
readTest4();
}
//方式1:一次读一个字节
public static void readTest1() throws IOException{
//1.找到目标文件
File file = new File("f:/a.txt");
//2.建立数据的输入通道
FileInputStream fileInputStream = new FileInputStream(file);
//3.读取文件中的数据
int i = fileInputStream.read();
System.out.println((char)i);
//4.关闭资源,实际上就是释放资源
fileInputStream.close();
}
//不使用缓冲数组,一次一个字节循环读取
public static void readTest2() throws IOException{
long startTime = System.currentTimeMillis();
//1.找到目标文件
//File file = new File("f:/a.txt");
File file = new File("f:/cool.png");
//2.建立数据的输入通道
FileInputStream fileInputStream = new FileInputStream(file);
//3.读取文件的数据
int content = 0;
while((content = fileInputStream.read()) != -1){
System.out.print((char)content);
}
//4.关闭资源,实际上就是释放资源
fileInputStream.close();
long stopTime = System.currentTimeMillis();
System.out.println("方式2读取总共耗时:" + (stopTime-startTime) + "ms"); //480毫秒
}
//方式3:使用缓冲数组读取。 缺点:无法读取完整一个文件的数据。 缓冲不能太大,因为假如读取12G电影,得分配很多内存,不可行。
public static void readTest3() throws IOException{
//1.找到目标文件
File file = new File("f:/a.txt");
//2.建立数据的输入通道
FileInputStream fileInputStream = new FileInputStream(file);
//3.读取文件的数据
//Long l = file.length();
//byte[] buff = new byte[l.intValue()];//缓冲不能太大,因为假如读取12G电影,得分配很多内存,不可行。
byte[] buff = new byte[40];//相当于超市里面的购物车,从此输入流中将最多 buff.length 个字节的数据读入一个 byte 数组中
int length = fileInputStream.read(buff);//如果使用read读取数据传入字节数组,那么数据是存储到字节数组中的,而这时候read()方法的返回值是本次读取了几个字节数据到字节数组byte[]中
System.out.println(new String(buff) + "前面有空白");
System.out.println(new String(buff, 0, length) + "前面没有空白");
//4.关闭资源,实际上就是释放资源
fileInputStream.close();
}
//方式4:使用缓冲数组 + 循环 配合读取。
public static void readTest4() throws IOException{
////1.找到目标文件
//File file = new File("f:/a.txt");
long startTime = System.currentTimeMillis();
//1.找到目标文件
//File file = new File("f:/a.txt");
File file = new File("f:/cool.png");
//2.建立数据的输入通道
FileInputStream fileInputStream = new FileInputStream(file);
//3.建立缓冲数组配合循环读取文件的数据
byte[] buff = new byte[1024];//用来存储每次读取到的数据,缓冲数组的长度一般是1024的倍数,因为与计算机的处理单位有关。理论上缓冲数组越大效率越高。
int length = 0;//保存每次都去到的字节个数。
int count = 1;//读取的次数
while((length = fileInputStream.read(buff)) != -1){//读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
System.out.print("读的第" + count++ + "次:" + new String(buff, 0, length));
}
//4.关闭资源,实际上就是释放资源
fileInputStream.close();
long stopTime = System.currentTimeMillis();
System.out.println("方式4读取总共耗时:" + (stopTime-startTime) + "ms"); //32ms
}
}
FileInputStream读取时要注意的细节:
0 0
- 字节流_FileInputStream类读取
- IO流_FileInputStream读取数据一次一个字节数组
- IO流_FileInputStream读取数据
- 字节流读取文件
- 文件读取字节流
- java学习初探十七之IO流_FileInputStream
- C#读取二进制字节流
- C#读取二进制字节流
- 模拟字节读取流缓冲区
- Java IO流字节读取
- 字节流读取数据注意事项
- java 字节流读取图片,字符流读取,二进制读取
- java 字节流读取图片,字符流读取,二进制读取
- java 字节流读取图片,字符流读取,二进制读取
- java 字节流读取图片,字符流读取,二进制读取
- java 字节流读取图片,字符流读取,二进制读取
- 通过java字节流复制文件,逐个字节读取写入
- java缓冲字节流复制文件,逐个字节读取、写入
- 简单工厂和抽象工厂
- C++11之std--future和std--promise
- Linux—用户管理相关文件
- Spring boot构建RESTFul API+使用Swagger2构建API文档
- 批量给Linux服务器分发公钥
- 字节流_FileInputStream类读取
- CSS2.1 17个命名颜色
- OpenGL核心技术之SSAO讲解(四)
- 怎么判断一组数字是不是堆
- poj 3258 最大化最小值
- 建立ftp服务器
- 字节流_FileOutputStream类写出
- Nginx介绍和安装准备
- HDU1028整数拆分(母函数)