### Java I/O详细笔记 #### 一、流的分类 Java I/O系统主要涉及四种基本的流分类方式:根据数据流动的方向、数据处理的类型、流处理的源以及是否使用了缓冲机制。 **1. 按数据流动方向** - **输入流(Input Stream)**:主要用于从某个数据源中读取数据,比如从文件中读取数据。输入流不允许被写入数据。 - **输出流(Output Stream)**:主要用于将数据写入到某个数据源,例如将数据写入文件中。输出流不允许从中读取数据。 **2. 按照流所处理的数据类型** - **字节流(Byte Stream)**:主要用于处理原始字节数据,例如处理图像或音频文件。 - **字符流(Character Stream)**:主要用于处理文本数据,能够直接处理Unicode字符,使得文本处理更加方便。 **3. 按照流所处理的源** - **节点流(Node Stream)**:直接与I/O设备交互,用于直接读取或写入数据。 - **处理流(Processing Stream)**:对其他流进行包装,提供额外的功能,如缓冲流等。 #### 二、缓冲流 缓冲流是在节点流的基础上增加了缓存功能,可以显著提高读写性能。主要有以下四种缓冲流: - **BufferedReader**:字符输入流的缓冲流,可以提高字符读取速度,并提供了一次读取一行数据的方法`readLine()`。 - **BufferedWriter**:字符输出流的缓冲流,可以提高字符写入速度,并提供了一次写入一行数据的方法`newLine()`。 - **BufferedInputStream**:字节输入流的缓冲流,提供了对输入流的高效读取能力。 - **BufferedOutputStream**:字节输出流的缓冲流,可以提高字节写入速度。 缓冲流还提供了`mark()`和`reset()`方法来标记位置并重置到标记位置,这对于某些需要重复读取数据的应用非常有用。 #### 三、类层次 Java的I/O流体系结构基于一系列抽象基类,通过继承这些基类实现具体的流操作。 **3.1 InputStream类层次** - `InputStream`:所有字节输入流的基类。 - `FileInputStream`:从文件系统中的文件中获取输入。 - `BufferedInputStream`:提供了缓冲的字节输入流。 **3.2 OutputStream类层次** - `OutputStream`:所有字节输出流的基类。 - `FileOutputStream`:将输出写入文件系统中的文件。 - `BufferedOutputStream`:提供了缓冲的字节输出流。 **3.3 Reader类层次** - `Reader`:所有字符输入流的基类。 - `InputStreamReader`:字节输入流到字符输入流的桥接器。 - `BufferedReader`:提供了缓冲的字符输入流。 **3.4 Writer类层次** - `Writer`:所有字符输出流的基类。 - `OutputStreamWriter`:字节输出流到字符输出流的桥接器。 - `BufferedWriter`:提供了缓冲的字符输出流。 #### 四、常用的字符流与字节流的转换 为了能够在不同的流之间进行转换,Java提供了两种桥梁类: - **InputStreamReader**:用于将字节流转换成字符流。 - **OutputStreamWriter**:用于将字符流转换成字节流。 #### 五、代码实例 下面通过两个示例来展示如何使用Java I/O读取文件内容: **5.1 常用读取字节文件** ```java public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { logger.debug("以字节为单位读取文件内容,一次读多个字节:"); byte[] tempBytes = new byte[100]; int byteRead = 0; in = new FileInputStream(file); while ((byteRead = in.read(tempBytes)) != -1) { logger.debug(new String(tempBytes, 0, byteRead)); } } catch (Exception e1) { logger.error("读取文本文件异常", e1); } finally { if (in != null) { try { in.close(); } catch (IOException e1) { logger.error("读取文本文件异常", e1); } } } } ``` **5.2 常用读取字符文件** ```java public static void readFileByChars(String fileName) { Reader reader = null; try { logger.debug("以字符为单位读取文件内容,一次读多个字节:"); char[] tempChars = new char[100]; int charRead = 0; if (fileName != null && !"".equals(fileName)) { reader = new InputStreamReader(new FileInputStream(fileName)); while ((charRead = reader.read(tempChars)) != -1) { // 处理读取的数据 System.out.println(new String(tempChars, 0, charRead)); } } } catch (Exception e1) { logger.error("读取文本文件异常", e1); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { logger.error("读取文本文件异常", e1); } } } } ``` 以上代码展示了如何使用Java的I/O库读取文件。通过选择适当的流和缓冲策略,可以有效地处理各种类型的文件数据。
剩余10页未读,继续阅读
- smile-dong2017-06-30不祥细,内容代码多
- 粉丝: 100
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助