动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

简要解析字节输入流InputStream

05-27 15:18 875浏览
举报 T字号
  • 大字
  • 中字
  • 小字

字节流是由字节组成的,Java里字符由两个字节组成.字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的但实际中很多的数据是文本,又提出了字符流的概念。因此,毫不夸张地说,字节流算是IO流中最基本的一个流类。而字节流又分为字节输入流InputStream和字节输出流OutputStream,字节输出流OutputStream我们之前已经讲过,本我们我们就来了解一下字节输入流InputStream。

首先,我们要知道字节输入流InputStream中的InputStream类,这个抽象类是表示以上输入字节流的所有类的超类(父类)。

InputStream类中的三个基本的读方法:

  • abstract int read() :读取一个字节数据,并返回读到的数据,如果返回 -1,表示读到了输入流的末尾。
  • int read(byte[] b) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。
  • int read(byte[] b, int off, int len) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回 -1,表示读到了输入流的末尾。off 指定在数组 b 中存放数据的起始偏移位置;len 指定读取的最大字节数。
  • read()方法 如果已读到末尾,返回-1表示不能继续读取了。

InputStream 的子类有:

  • ByteArrayInputStream
  • FileInputStream
  • FilterInputStream
  • PushbackInputStream
  • DataInputStream
  • BufferedInputStream
  • LineNumberInputStream
  • ObjectInputStream
  • PipedInputStream
  • SequenceInputStream
  • StringBufferInputStream

这么多子类不需要每一个都记住,只需要记住两个:

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流视频课程,一次学个够!

0人推荐
共同学习,写下你的评论
0条评论
代码小兵498
程序员代码小兵498

153篇文章贡献528999字

相关课程 更多>

作者相关文章更多>

推荐相关文章更多>

Java面试题及答案整理

提枪策马乘胜追击04-21 20:01

Spring常见面试题

代码小兵92504-17 16:07

Java零基础实战项目——五子棋

代码小兵98804-25 13:57

Java string类详解

杨晶珍05-11 14:54

6道经典算法面试题

杨晶珍05-12 16:39

发评论

举报

0/150

取消