一、InputStream概述
InputStream是Java IO中用于读取字节流的抽象类。它是所有输入流的超类,可以从文件、网络、内存等任何来源中读取字节流。
InputStream中最常用的方法是read(),用于读取下一个字节,返回的是字节数据的整数值,如果已到达流的末尾,则返回-1。
二、InputStrem使用
使用InputStream读取文件数据需要以下步骤:
1、打开文件:使用InputStream打开指定文件。
2、读取数据:使用read()方法读取文件数据。
3、关闭文件:使用InputStrem关闭文件。
public class InputStreamExample { public static void main(String[] args) { try { FileInputStream inputStream = new FileInputStream("test.txt"); int data; while ((data = inputStream.read()) != -1) { System.out.print((char) data); } inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
三、缓冲流BufferedInputStream
InputStream每次只能读取一个字节,如果需要读取大量数据,则需要多次读取,效率低下。这时可以使用缓冲流BufferedInputStream,在InputStream的基础上增加了一个缓冲区,使得可以批量读取数据,提高了读取效率。
public class BufferedInputStreamExample { public static void main(String[] args) { try { FileInputStream inputStream = new FileInputStream("test.txt"); BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); int data; while ((data = bufferedInputStream.read()) != -1) { System.out.print((char) data); } bufferedInputStream.close(); inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
四、字节数组InputStream
除了使用一个字节一个字节地读取文件数据,也可以直接将整个文件数据读入一个字节数组中,再进行处理。
public class ByteArrayInputExample { public static void main(String[] args) { String str = "Hello World!"; byte[] byteArray = str.getBytes(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray); int data; while ((data = byteArrayInputStream.read()) != -1) { System.out.print((char) data); } byteArrayInputStream.close(); } }
五、文件IO异常处理
在读取文件的过程中,可能会遇到文件不存在、无法访问、权限不够等异常。为了避免程序崩溃,需要对异常进行捕获和处理。
public class InputStreamEnsureExample { public static void main(String[] args) { FileInputStream inputStream = null; try { inputStream = new FileInputStream("test.txt"); int data; while ((data = inputStream.read()) != -1) { System.out.print((char) data); } } catch (IOException e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
六、小结
Java InputStream提供了读取文件数据的基础功能,能够从文件、网络等不同来源中读取字节数据。使用InputStream读取文件数据需要遵循打开、读取、关闭的基本步骤,可以结合缓冲流BufferedInputStream、字节数组InputStream等进行批量读取数据,提高读取效率。同时在读取文件数据时需要处理可能出现的异常,并最终保证文件流的关闭。