字节流是由字节组成的,Java里字符由两个字节组成.字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的但实际中很多的数据是文本,又提出了字符流的概念。因此,毫不夸张地说,字节流算是IO流中最基本的一个流类。而字节流又分为字节输入流InputStream和字节输出流OutputStream,字节输出流OutputStream我们之前已经讲过,本我们我们就来了解一下字节输入流InputStream。
首先,我们要知道字节输入流InputStream中的InputStream类,这个抽象类是表示以上输入字节流的所有类的超类(父类)。
InputStream类中的三个基本的读方法:
InputStream 的子类有:
这么多子类不需要每一个都记住,只需要记住两个:
FileInputStream:文件字节输入流,就是对文件数据以字节的方式来处理,如音乐、视频、图片等。
BufferedInputStream:使用方式基本和FileInputStream一致。BufferedInputStream有一个内部缓冲区数组,一次性读取较多的字节缓存起来,默认读取defaultBufferSize = 8192,作用于读文件时可以提高性能。
我们具体来看一下FileInputStream子类的用法:
1.根据path路径实例化一个输入流的对象,在该方法中会抛出一个文件找不到的时候的一个异常,所以我们在用的时候也要特别注意不要文件路径是否正确,以及文件是和存在;
FileInputStream fis=null;
try {
// 根据path路径实例化一个输入流的对象
fis = new FileInputStream(path);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
2.在数据流创建好之后,就可以获取在这个输入流中可以被读的剩下的byte字节的估计值
3.然后根据我们获取的这个数据去创建一个byte数组
4.在然后把我们要读取的数组读到数组中
5.获取到byte数组之后,根据byte数组去创建一个string字符串;我们可以把这个字符串输出来检查我们是否获取到了数据
6.在我们获取完数组之后,我们需要去关闭我们的FileInputStream对象;也就是把文件与程序之间的通道关闭;代码如下:
/**
* 读取文件中的数据的方法;
* @param path要读取得文件的路径和文件全名;
* @return 返回读取到的文件中的字符串;
*/
// @SuppressWarnings("finally")
public String readFile(String path) {
FileInputStream fis = null;// 实例化FileInputStream对象;
String str = null;
try {
// 1.根据path路径实例化一个输入流的对象
fis = new FileInputStream(path);
//2. 返回这个输入流中可以被读的剩下的bytes字节的估计值;
int size = fis.available();
//3. 根据输入流中的字节数创建byte数组;
byte[] array = new byte[size];
fis.read(array);//4.把数据读取到数组中;
//5.根据获取到的Byte数组新建一个字符串,然后输出;
str = new String(array);
System.out.println(str);//输出;
} catch (FileNotFoundException e) {
// 解决new FileInputStream(path);可能会发生的异常;
e.printStackTrace();
} catch (IOException e) {
// 解决fis.available()时可能发生的异常;
e.printStackTrace();
} finally {
//6.在最后,关闭我们的IO流
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return str;
}
好了,上述的内容就是字节输入流InputStream的部分知识,觉得还不尽兴的小伙伴可以到动力节点在线观看免费的全套IO流视频课程,一次学个够!
提枪策马乘胜追击04-21 20:01
代码小兵92504-17 16:07
代码小兵98804-25 13:57
杨晶珍05-11 14:54