Java 中 IO 流

目录

前言

1. 字节流(Byte Streams):

1.1 输入字节流:

1.2 输出字节流:

2. 字符流(Character Streams):

2.1 输入字符流:

2.2 输出字符流:

3. 转换流(转换流用于连接字节流和字符流):

4. 对象流:

我的其他博客


前言

在Java中,I/O(输入/输出)流是用于处理输入和输出操作的机制。Java的I/O流主要分为两大类:字节流(Byte Streams)和字符流(Character Streams)。每个类别又分为输入流和输出流。

1. 字节流(Byte Streams):

字节流以字节为单位进行读写操作,适用于处理二进制数据(如图像、音频等)。

1.1 输入字节流:
  • InputStream(输入流的抽象基类):
    • FileInputStream: 从文件读取字节。
      FileInputStream fis = new FileInputStream("example.txt");
      int data = fis.read();
      while (data != -1) {
          // 处理读取的字节数据
          System.out.print((char) data);
          data = fis.read();
      }
      fis.close();
      

    • ByteArrayInputStream: 从字节数组读取字节。
      byte[] byteArray = {65, 66, 67, 68, 69}; // ASCII values for A, B, C, D, E
      ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);
      int data = bais.read();
      while (data != -1) {
          // 处理读取的字节数据
          System.out.print((char) data);
          data = bais.read();
      }
      bais.close();
      

    • BufferedInputStream: 提供缓冲功能,提高读取效率。
      FileInputStream fis = new FileInputStream("example.txt");
      BufferedInputStream bis = new BufferedInputStream(fis);
      int data = bis.read();
      while (data != -1) {
          // 处理读取的字节数据
          System.out.print((char) data);
          data = bis.read();
      }
      bis.close();
      

1.2 输出字节流:
  • OutputStream(输出流的抽象基类):
    • FileOutputStream: 向文件写入字节。
      FileOutputStream fos = new FileOutputStream("output.txt");
      fos.write("Hello, World!".getBytes());
      fos.close();
      

    • ByteArrayOutputStream: 将字节写入到字节数组。
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      baos.write("Hello, World!".getBytes());
      byte[] result = baos.toByteArray();
      baos.close();
      

    • BufferedOutputStream: 提供缓冲功能,提高写入效率。
      FileOutputStream fos = new FileOutputStream("output.txt");
      BufferedOutputStream bos = new BufferedOutputStream(fos);
      bos.write("Hello, World!".getBytes());
      bos.close();
      

2. 字符流(Character Streams):

字符流以字符为单位进行读写操作,适用于处理文本数据。

2.1 输入字符流:
  • Reader(输入流的抽象基类):
    • FileReader: 从文件读取字符。
      FileReader fr = new FileReader("example.txt");
      int data = fr.read();
      while (data != -1) {
          // 处理读取的字符数据
          System.out.print((char) data);
          data = fr.read();
      }
      fr.close();
      

    • CharArrayReader: 从字符数组读取字符。
      char[] charArray = {'A', 'B', 'C', 'D', 'E'};
      CharArrayReader car = new CharArrayReader(charArray);
      int data = car.read();
      while (data != -1) {
          // 处理读取的字符数据
          System.out.print((char) data);
          data = car.read();
      }
      car.close();
      

    • BufferedReader: 提供缓冲功能,提高读取效率。
      FileReader fr = new FileReader("example.txt");
      BufferedReader br = new BufferedReader(fr);
      String line = br.readLine();
      while (line != null) {
          // 处理读取的一行字符数据
          System.out.println(line);
          line = br.readLine();
      }
      br.close();
      

2.2 输出字符流:
  • Writer(输出流的抽象基类):
    • FileWriter: 向文件写入字符。
      FileWriter fw = new FileWriter("output.txt");
      fw.write("Hello, World!");
      fw.close();
      

    • CharArrayWriter: 将字符写入到字符数组。
      CharArrayWriter caw = new CharArrayWriter();
      caw.write("Hello, World!");
      char[] result = caw.toCharArray();
      caw.close();
      

    • BufferedWriter: 提供缓冲功能,提高写入效率。
      FileWriter fw = new FileWriter("output.txt");
      BufferedWriter bw = new BufferedWriter(fw);
      bw.write("Hello, World!");
      bw.close();
      

3. 转换流(转换流用于连接字节流和字符流):

  • InputStreamReader: 将字节输入流转换为字符输入流。
    FileInputStream fis = new FileInputStream("example.txt");
    InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
    BufferedReader br = new BufferedReader(isr);
    // 通过 BufferedReader 读取字符数据
    br.close();
    

  • OutputStreamWriter: 将字节输出流转换为字符输出流。
    FileOutputStream fos = new FileOutputStream("output.txt");
    OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
    BufferedWriter bw = new BufferedWriter(osw);
    // 通过 BufferedWriter 写入字符数据
    bw.close();
    

4. 对象流:

  • ObjectInputStream: 用于读取对象的输入流。
    FileOutputStream fos = new FileOutputStream("object.dat");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    
    MyClass obj = new MyClass(); // MyClass需要实现Serializable接口
    oos.writeObject(obj);
    
    oos.close();
    

  • ObjectOutputStream: 用于写入对象的输出流。
    FileInputStream fis = new FileInputStream("object.dat");
    ObjectInputStream ois = new ObjectInputStream(fis);
    
    MyClass obj = (MyClass) ois.readObject(); // 强制类型转换为实际的对象类型
    
    ois.close();
    

我的其他博客

Git命令大全:从基础到高级应用-CSDN博客

简单介绍一些其他的树-CSDN博客

什么是tomcat?tomcat是干什么用的?-CSDN博客

TCP/IP 四层体系结构-CSDN博客

Redis新数据类型-Bitmaps-CSDN博客

腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足-CSDN博客Synchronized 优化-CSDN博客腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足-CSDN博客

【计算机网络】URL概念及组成-CSDN博客

【计算机网络】TCP socket编程-CSDN博客

枚举类的final修饰-CSDN博客

什么是RabbitMQ-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/249557.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何一键生成多个文件二维码?批量文件二维码制作技巧

文件能批量生成二维码吗?现在的二维码用途范围越来越广,比如常见的有图文、文件、问卷、音频或者视频等内容生成二维码图片,扫码查看内容。那么当需要将很多的文件每个都单独生成一个二维码时,有没有比较简单快捷的操作方法吗&…

SELinux介绍

本章主要介绍在RHEL8中如何使用 SELinux。 了解什么是 SELinux了解 SELinux 的上下文配置端口上下文了解SELinux的布尔值了解SELinux的模式 在 Windows系统中安装了一些安全软件后,当执行某个命令时,如果安全软件认为这个命令对系统是一种危害&#…

二维差分详解

前言 上一期我们分享了一维差分的使用方法,这一期我们将接着上期的内容带大家了解二位差分的使用方法,话不多说,LET’S GO!(上一期链接) 二维差分 二维差分我们可以用于对矩阵区间进行多次操作的题。 二维差分我们还…

使用国内镜像源安装opencv

在控制台输入命令: pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 验证安装: step 1: 打开终端;step 2: 输入python,进入Python编译环境;step 3: 粘贴…

LT8711HE方案《任天堂Switch底座方案》

LT8711HE Type-c转HDMI方案 LT8711HE是高性能的Type-C/DP1.2转HDMI2.0转换器,设计用于连接 USB Type-C 源或 DP1.2 源到 HDMI2.0 接收器。该LT8711HE集成了符合 DP1.2 标准的接收器和符合 HDMI2.0 标准的发射器。此外,两个 CC 控制器是包括用于 CC 通信以…

20.Java程序设计-基于SSM框架的安卓掌上校园生活系统的设计与实现

摘要: 随着移动互联网技术的快速发展,校园生活信息化成为提高学校管理效率、方便学生生活的关键。本研究以基于SSM(Spring Spring MVC MyBatis)框架的技术体系为基础,致力于设计与实现一款功能强大、高效稳定的安卓…

手动添加Git Bash Here到右键菜单(超详细)

通过WindowsR快捷键可以打开“运行窗口”,在“窗口”中输入“regedit”,点击“确定”打开注册表。 依次进入HKEY_CLASSES_ROOT —-》 Directory —-》Background —-》 shell 路径为Computer\HKEY_CLASSES_ROOT\Directory\Background\shell 3.在“s…

来聊聊Spring的循环依赖

文章目录 首先了解一下什么是循环依赖简述解决循环依赖全过程通过debug了解Spring解决循环依赖全过程Aservice的创建递归来到Bservice的创建然后BService递归回到了getAservice的doGetBean中故事再次回到Aservice填充BService的步骤 总结成流程图为什么二级就能解决循环依赖问题…

2023年底总结丨5大好用的局域网监控软件

不知不觉间2023年又到结尾了,今年我们服务过很多想要电脑监控软件的客服,也服务了很多想要加密软件的客户。 这一年,我们走得不疾不徐,走得稳而坚定;这一年,我们累积服务超过万计客户;这一年&a…

面试官:这些大学生都会

大家好,我是 JavaPub。 最近有些同学在后台问我,面试总是会遇到被问 Linux 命令的问题,自己就面试个后端开发岗位,怎么这么难呢? 其实 Linux 命令,对于一个后端开发来说,并不是很难&#xff0c…

springcloudalibaba01

整合springcloud 和 springcloudalibaba&#xff0c;&#xff0c;&#xff0c; 版本对应关系 <dependencyManagement><dependencies><!--每个springcloud的工具都有一个版本每个springcloud alibaba的工具都有一个版本统一版本--> <!-- 整合…

spring boot 实现直播聊天室

spring boot 实现直播聊天室 技术方案: spring bootwebsocketrabbitmq 使用 rabbitmq 提高系统吞吐量 引入依赖 <dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.42&…

广州华锐互动:汽车电子线束加工VR仿真培训与实际生产场景相结合,提高培训效果

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐渗透到各个领域&#xff0c;为企业和个人带来了前所未有的便利。在汽车制造行业中&#xff0c;线束加工作为一项关键的生产工艺&#xff0c;其质量直接影响到汽车的性能和安全。因此&#xff0c;…

【UE】在蓝图中修改材质实例的参数的两种方式

目录 方式一、通过“在材质上设置标量/向量参数值”节点实现 方式二、通过“设置标量/向量参数值”节点实现 方式一、通过“在材质上设置标量/向量参数值”节点实现 1. 在材质中设置了两个参数 2. 创建材质实例 3. 创建一个蓝图&#xff0c;对静态网格体赋予材质实例 在事件…

基于虚拟机下的win7系统安装简记

文章目录 安装系统激活win7提示系统保留分区未分配驱动器问题使用win7 Active激活系统根据dns分配的ip地址将网络改为固定ip&#xff0c;然后关闭防火墙&#xff0c;即可完成虚拟机与宿主机互通 安装系统 在虚拟机中找到自己下载win7镜像文件&#xff0c;配置完成后一路next即…

MySQL数据库卸载-Windows

目录 1. 停止MySQL服务 2. 卸载MySQL相关组件 3. 删除MySQL安装目录 4. 删除MySQL数据目录 5. 再次打开服务&#xff0c;查看是否有MySQL卸载残留 1. 停止MySQL服务 winR 打开运行&#xff0c;输入 services.msc 点击 "确定" 调出系统服务。 2. 卸载MySQL相关组…

虚幻学习笔记13—C++静态和动态加载

一、前言 我们在蓝图中可以很方便的添加各种需要的组件&#xff0c;那么在C代码中要如何实现呢。在代码中分静态和动态加载&#xff0c;而无论静态和动态&#xff0c;加载的内容有资源和资源类&#xff0c;资源类通常为带资源的蓝图类。 二、实现 在实现静态或动态加载时&…

什么是回调函数

需求 A&#xff0c;B两个小组开发一个功能。B小组开发制作油条模块:make_youtiao。A小组需要调用B小组开发的模块&#xff0c;然后执行后续的操作&#xff1a;sell()如下图&#xff1a; 上面的方式A小组必须等待B小组开发的模块make_youtiao执行完成后才能执行sell()。 上图代…

力扣 | 98. 验证二叉搜索树

98. 验证二叉搜索树 中序遍历 (边遍历边验证顺序性) private TreeNode prev null;private boolean isBST true;public boolean isValidBST(TreeNode root) {inorder(root);return isBST;}private void inorder(TreeNode node) {if (node null) return;inorder(node.left);…

什么是第一方数据,如何使用它?

多年来&#xff0c;第一方数据一直是营销行业的话题。 随着用户数据隐私法律法规的不断收紧&#xff0c;营销人员必须接受一个几乎没有数据 cookie 的世界。 我们必须在如何合法和合乎道德地获取客户信息方面更具创造性。 不确定什么是第一方数据&#xff1f;或者不太确定从…