【Java IO 学习总结】 Java IO 是 Java 平台中用于处理输入和输出的核心库,它提供了丰富的类和接口,使得程序能够与各种设备、文件系统以及网络进行交互。IO 操作通常涉及数据的传输,Java 中所有的数据传输都是通过流(Stream)的方式进行的。流可以分为两大类:输入流(Input Stream)和输出流(Output Stream),它们分别负责数据的读取和写入。根据数据单位的不同,流又可以分为字节流(Byte Stream)和字符流(Character Stream)。 1. **流的分类** - 输入流和输出流:这是按照数据流动的方向来划分的,输入流是从外部源(如文件、网络连接)向程序内部读取数据,而输出流则是将数据从程序内部写入到外部目标。 - 字节流和字符流:字节流操作的是字节序列,适用于所有类型的数据,如图像、音频等非文本数据。字符流则处理字符序列,主要用于文本数据,它内部包含了对字符编码的支持。 2. **IO 流体系** - 字节流的顶级父类是 `InputStream` 和 `OutputStream`。常见的字节输入流包括 `FileInputStream`(文件字节输入流)和 `BufferedInputStream`(缓冲字节输入流),后者可以提高读取效率。字节输出流的常见类有 `FileOutputStream`(文件字节输出流)和 `BufferedOutputStream`(缓冲字节输出流)。 - 字符流的父类是 `Reader` 和 `Writer`。`Reader` 常见的子类有 `InputStreamReader`(转换流,用于将字节流转化为字符流,可指定编码)和 `FileReader`(文件字符读取流,使用系统默认编码)。`Writer` 的常见子类包括 `OutputStreamWriter`(转换流,字符到字节)和 `FileWriter`(文件字符写出流)。`BufferedReader` 和 `BufferedWriter` 是字符流的缓冲类,提高读写效率,其中 `BufferedReader` 提供了 `readLine()` 方法用于读取文本行。 3. **字符流的由来和作用** - 字符流是为了应对不同国家和地区使用的多种字符编码而产生的。字符流在处理文本数据时,会先查找指定的字符编码表(如 ASCII、ISO8859-1、GBK 或 Unicode),获取对应的二进制数据,然后再进行操作。这样可以避免因编码不一致导致的乱码问题。对于纯文本数据,推荐使用字符流;而对于非文本数据(如图片、音频),应使用字节流。 4. **代码示例** - **字符流写入**:使用 `FileWriter` 可以将字符串写入到文件中。例如: ```java FileWriter fw = null; try { fw = new FileWriter("Test.txt"); fw.write("text"); } catch (IOException e) { System.out.println(e.toString()); } finally { if (fw != null) { try { fw.close(); } catch (IOException e) { System.out.println(e.toString()); } } } ``` - **字符流读取**:使用 `FileReader` 可以读取文件中的字符数据。例如: ```java FileReader fr = null; try { fr = new FileReader("c:\\test.txt"); char[] buf = new char[1024]; int len = 0; while ((len = fr.read(buf)) != -1) { System.out.println(new String(buf, 0, len)); } } catch (IOException e) { System.out.println("read-Exception :" + e.toString()); } finally { if (fr != null) { try { fr.close(); } catch (IOException e) { System.out.println("close-Exception :" + e.toString()); } } } ``` - **字节流操作**:例如,使用字节流复制文件(从 C 盘到 D 盘): ```java FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream("C:\\image.jpg"); fos = new FileOutputStream("D:\\image.jpg"); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } } catch (IOException e) { e.printStackTrace(); } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 5. **装饰模式的应用** - 在 Java IO 中,`BufferedInputStream`、`BufferedOutputStream`、`BufferedReader` 和 `BufferedWriter` 都是装饰模式的实例,它们在原有流的基础上增加了缓冲功能,提高了性能。此外,`LineNumberReader` 是一个扩展 `BufferedReader` 的类,增加了获取和设置当前行号的功能。 Java IO 系统提供了一套完整的框架,涵盖了从基本的输入输出操作到复杂的文件复制、网络通信等功能。理解并熟练掌握这些概念和类,对于进行任何 Java 应用开发都至关重要。在实际编程中,根据数据类型选择合适的流类型,并利用装饰模式增强流的功能,能够有效地优化代码性能和可维护性。
剩余15页未读,继续阅读
- 粉丝: 0
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 爱依克签批屏KY系列BS架构二次开发包,采用Websocket通信协议,内含驱动服务与开发文档,支持H5页面签名,PDF文件签名、指纹采集捺印以及摄像头拍摄和二代证身份身份信息读取
- Aspera高效文件传输产品技术解析与应用
- STM32DS3231硬件I2C读写,基于HAL库
- double数据做乘法保留两位小数的处理办法.txt
- 详细解读:毕业设计项目及写作技巧全程指南
- 学生成绩管理系统软件界面
- js判断时间多久之前.txt
- Temporal注解的作用.txt
- 五行与商业:古代智慧的探索与传承.docx
- 04747《Java语言程序设计(一)》真题试题 2019 -2021
- 处理苹果手机倒计时功能异常.txt
- HarmonyOS-ArkTS语言-购物商城的实现
- 导出表格报错net.sf.excelutils.ExcelException.txt
- 判断对象不为空的方法参考.txt
- Python爬虫技术入门与实战指南
- C++程序设计 课件PPT