如何使用OutputStream类实现文件的读写操作?

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

哈喽,各位小伙伴们,你们好呀,我是喵手。

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

在Java中,输入输出流是非常重要的概念。输入流用于读取数据,而输出流则用于将数据写入到输出目的地。在本文中,我们将着重介绍Java中的OutputStream类,这是一个抽象类,用于向各种输出目的地写入数据。

摘要

本文将介绍使用Java中的OutputStream类进行文件、网络、控制台的输出操作,并会分析该类的优缺点。

OutputStream类

简介

在Java中,OutputStream类是一个抽象类,它提供了向各种输出目的地写入数据的一般方法。OutputStream类是所有输出流类的祖先类,包括FileOutputStream、ByteArrayOutputStream、PipedOutputStream等。

OutputStream类的主要方法是write()。它的基本形式接受一个字节,但也有其他几种变体形式,如写入整个字节数组、部分字节数组等。

源代码解析

Java中的OutputStream类是一个抽象类,它是字节输出流的基类。OutputStream类提供了许多方法,用于将字节写入输出流中。

以下是OutputStream类的一些常见方法:

  • public void write(int b):将指定的字节写入输出流。
  • public void write(byte[] b):将b数组中的所有字节写入输出流。
  • public void write(byte[] b, int off, int len):将b数组中从off位置开始的len个字节写入输出流。
  • public void flush():刷新输出流,强制将所有缓冲的输出字节写入底层输出流。
  • public void close():关闭输出流并释放与该流相关联的所有系统资源。

OutputStream类的实现通常是通过子类来完成的,例如FileOutputStream、ByteArrayOutputStream、PipedOutputStream等。

以下是OutputStream类的部分源代码:

public abstract class OutputStream implements Closeable, Flushable {
    // …

    public void write(byte b[]) throws IOException {
        write(b, 0, b.length);
    }

    public void write(byte b[], int off, int len) throws IOException {
        if (b == null) {
            throw new NullPointerException();
        } else if (off < 0 || len < 0 || off + len > b.length) {
            throw new IndexOutOfBoundsException();
        } else if (len == 0) {
            return;
        }

        for (int i = 0; i < len; i++) {
            write(b[off + i]);
        }
    }

    public abstract void write(int b) throws IOException;

    public void flush() throws IOException {
    }

    public void close() throws IOException {
    }

    // …
}

从以上代码可以看出,OutputStream类定义了抽象方法write(),其余方法都是具体实现的。在write(byte b[])和write(byte b[], int off, int len)方法中,也调用了write(int b)方法来实现写入操作。

OutputStream类还实现了Closeable和Flushable接口,使得它可以通过调用close()和flush()方法来关闭和刷新输出流。

  如下是部分源码截图:

在这里插入图片描述

应用场景案例

OutputStream类可以用于多种输出目的地,如文件、网络、控制台等。下面是一些常见的应用场景案例:

1. 将数据写入文件

使用FileOutputStream可以将数据写入文件。以下是一个示例:

FileOutputStream fos = new FileOutputStream("output.txt");
for (int i = 0; i < 10; i++) {
    fos.write(i);
}
fos.close();

2. 将数据写入网络

使用SocketOutputStream可以将数据写入网络。以下是一个示例:

Socket socket = new Socket("127.0.0.1", 8080);
OutputStream os = socket.getOutputStream();
os.write("Hello, world".getBytes());
os.close();

3. 将数据打印到控制台

使用System.out可以将数据打印到控制台。以下是一个示例:

System.out.write("Hello, world".getBytes());

优缺点分析

优点

  • OutputStream类具有通用性,可以向多种输出目的地写入数据。
  • OutputStream类提供了多种写入数据的方法,可以根据需求选择适当的方法。
  • OutputStream类是抽象类,可以被继承并进行扩展。

缺点

  • OutputStream类的write()方法不能保证一次写入所以数据都成功,需要在外部进行判断并处理。

类代码方法介绍

以下是OutputStream类的主要方法:

方法名称说明
write(int b)将指定的字节写入输出流
write(byte[] b)将指定的字节数组写入输出流
write(byte[] b, int off, int len)将指定的字节数组中的一部分写入输出流
flush()刷新输出流
close()关闭输出流

测试用例

测试代码演示

以下是一个OutputStream的测试用例:

package com.example.javase.se.classes;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

/**
 * @Author ms
 * @Date 2023-11-05 18:26
 */
public class OutputStreamTest {

    public static void main(String[] args) {
        // 写入文件
        try {
            FileOutputStream fos = new FileOutputStream("test.txt");
            byte[] data = "Hello, world!".getBytes();
            fos.write(data);
            fos.flush();
            fos.close();
        } catch (IOException e) {
            System.out.println("写入文件时发生错误:" + e);
        }

        // 写入控制台
        OutputStream os = System.out;
        byte[] data = "Hello, world!".getBytes();
        try {
            os.write(data);
            os.flush();
            os.close();
        } catch (IOException e) {
            System.out.println("写入控制台时发生错误:" + e);
        }
    }
}

测试结果

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述

测试代码分析

  根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。

这是一个使用Java的输出流(OutputStream)进行写操作的示例代码。代码主要包括两部分:

第一部分在文件系统中创建一个名为“test.txt”的文本文件,并在该文件中写入“Hello, world!”字符串。

第二部分将同样的字符串输出到控制台。输出流通过System.out获取,然后将字符串转换为字节数组,使用write方法将字节数组写入控制台。最后通过flush和close方法刷新并关闭输出流。

需要注意的是,这里的文件和控制台的输出流类型都是OutputStream,这个抽象类提供了写入字节数据的通用方法,实际使用时需要根据具体需求选择不同的OutputStream子类进行实例化。

全文小结

在本文中,我们介绍了Java中的OutputStream类,该类提供了向各种输出目的地写入数据的一般方法。我们学习了如何使用OutputStream将数据写入文件、网络、控制台等目的地,并分析了该类的优缺点。最后,我们提供了一个OutputStream的测试用例。

总结

本文介绍了Java中的OutputStream类,它是一个抽象类,提供了向各种输出目的地写入数据的一般方法。我们学习了如何使用OutputStream将数据写入文件、网络、控制台等目的地,并分析了该类的优缺点。此外,本文还提供了一个OutputStream的测试用例。总的来说,OutputStream是Java中重要的输出流类之一,提供了许多方法,可以根据需求选择适当的方法来实现数据的写入操作。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

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

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

相关文章

如何提升项目经理的汇报能力?从这四点做起

项目经理不仅需要管理项目进度、预算和资源&#xff0c;更需要与各方进行有效的沟通&#xff0c;确保项目的顺利进行。而在所有沟通形式中&#xff0c;当众演讲无疑是难度最大的一种。 他们需要向团队成员传达项目的最新进展和要求&#xff0c;向领导和客户汇报工作成果&…

Java 定义类型处理MySQL point类型数据

1.三个类来处理 引入maven依赖 <!-- 引入 jts 库解析 POINT --><dependency><groupId>com.vividsolutions</groupId><artifactId>jts</artifactId><version>1.13</version></dependency>import javax.validation.constr…

推送邮件接口设置的方法?邮件接口的作用?

推送邮件接口如何与现有系统集成&#xff1f;怎么调试邮件接口&#xff1f; 通过推送邮件接口&#xff0c;应用程序可以自动向用户发送邮件通知&#xff0c;提醒他们重要事件或更新。AokSend将介绍如何设置推送邮件接口&#xff0c;以便您的应用程序能够充分利用这一功能。 推…

和为k的子数组 ---- 前缀和

题目链接 题目: 分析: 思考: 此题能否用滑动窗口来解决? 滑动窗口的适用前提是具有单调性, left和right指针是不回退的, 此题中数组有负数和零, 很难保证指针不回退, 所以不能用滑动窗口利用前缀和的思想, 计算以i结尾的所有子数组, 前缀和为sum[i] 想要找到和为k的数组, 我…

基于图鸟UI的圈子商圈:一个全栈前端模板的探索与应用

摘要&#xff1a; 本文介绍了一个基于图鸟UI的纯前端模板——圈子商圈&#xff0c;它支持微信小程序、APP和H5等多平台开发。该模板不仅包含丰富的UI组件和页面模板&#xff0c;还提供了详尽的使用文档&#xff0c;旨在帮助开发者快速构建出酷炫且功能齐全的前端应用。本文将从…

让WSL内核使用BBR拥塞控制算法

使用git命令从Linux内核的Git仓库中获取源代码,$ git clone https://github.com/microsoft/WSL2-Linux-Kernel.git,找到对应的内核版本$ git log --grep="5.15.146.1-microsoft-standard-WSL2",回退到本机安装的内核版本$ git checkout <commit-id> ee5b8e3…

在 Rocky 9 上编译 MySQL 8.2.0 Debug 版本编译指南

↑ 关注“少安事务所”公众号&#xff0c;欢迎⭐收藏&#xff0c;不错过精彩内容~ unsetunset前情提要unsetunset 前文已经介绍了如何安装 Rocky Linux 9.2&#xff0c;这里便不再赘述。 同时&#xff0c;也已经介绍过 MySQL 8.2.0 的参数变化&#xff0c;以及提及如何安装 MyS…

力扣:236.二叉树的最近公共祖先(C++)

文章目录 1. 题目描述2. 题目解析2.1 思路一2.1 思路二 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 题目来源: 力扣…二叉树的最近公共祖先 1. 题目描述 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表…

代码随想录算法训练营第四十一天 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

理论基础 代码随想录 视频&#xff1a;从此再也不怕动态规划了&#xff0c;动态规划解题方法论大曝光 &#xff01;| 理论基础 |力扣刷题总结| 动态规划入门_哔哩哔哩_bilibili 动归五部曲 1.dp数组以及下标的含义 2.递推公式 3.dp数组如何初始化 4.遍历顺序(例如先背包再…

ue的event dispatch.操作步骤,最详细了

功能&#xff1a;按下键盘1&#xff0c;send方监控键盘事件&#xff0c;recv方打印success Dispatch 间接通信 示例&#xff1a;1.发送方按下键盘1。2.接收方打印success 蓝图很简单&#xff1a; 发送方 接收方 具体操作步骤如下&#xff1a; 1.场景发送方运行监听键盘 2.接受…

Seurat Dimplot函数学习总结

今天为了画这个cluster中怎么显示标签的图&#xff0c;研究了一个Seurat中怎么画这个图的&#xff0c;下面是学习过程中做的总结 运行例子 rm(listls()) library(Seurat) library(SeuratData) library(ggplot2) library(patchwork) pbmc3k.final <- LoadData("pbmc3k…

学浪的缓存怎么导出来

学浪的缓存导出问题困扰着许多用户&#xff0c;备份和管理数据变得至关重要。在数字化时代&#xff0c;保护和利用数据是企业和个人不可或缺的需求。在这篇文章中&#xff0c;我们将深入探讨学浪缓存导出的方法&#xff0c;为您解决疑惑&#xff0c;让您轻松掌握数据的安全与便…

自定义类型详解(结构体,位段,枚举,联合体)

目录 结构体 结构体的自引用 匿名结构体 结构体内存对齐 结构体内存对齐的意义 修改默认对齐数 位段 位段的内存分配 位段的跨平台问题 位段的应用 枚举 枚举类型的定义 枚举和#define的区别 联合体&#xff08;共用体&#xff09; 联合体大小的计算 结构体 C语…

斐讯N1刷OpenWRT并安装内网穿透服务实现远程管理旁路由

文章目录 前言1. 制作刷机固件U盘1.1 制作刷机U盘需要准备以下软件&#xff1a;1.2 制作步骤 2. N1盒子降级与U盘启动2.1 N1盒子降级2.2 N1盒子U盘启动设置2.3 使用U盘刷入OpenWRT2.4 OpenWRT后台IP地址修改2.5 设置旁路由&无线上网 3. 安装cpolar内网穿透3.1 下载公钥3.2 …

08Django项目--用户管理系统--查(前后端)

对应视频链接点击直达 TOC 一些朋友加我Q反馈&#xff0c;希望有每个阶段的完整项目代码&#xff0c;那从今天开始&#xff0c;我会上传完整的项目代码。 用户管理&#xff0c;简而言之就是用户的增删改查。 08项目点击下载&#xff0c;可直接运行&#xff08;含数据库&…

3个完美恢复方案!苹果手机恢复视频就是这么简单

在日常生活中&#xff0c;我们使用苹果手机记录了许多珍贵的视频&#xff0c;包括家庭聚会、旅行经历等。但是我们不小心删除了&#xff0c;在“最近删除”文件夹中也找不到。 别担心&#xff0c;这并不困难&#xff01;无论您是意外删除了重要的视频还是遇到了其他数据丢失问…

PawSQL: 企业级SQL审核工具的新玩家

随着数据库应用在企业中的广泛使用&#xff0c;确保SQL代码质量的重要性日益凸显。现有的SQL审核工具很多&#xff0c;包括Yearning、goInception、Bytebase、爱可生的SQLE、云和恩墨的SQM等等&#xff0c;但是它们或者规则覆盖度、或者是在正确率等方面存在明显不足&#xff1…

【stm32】江科协听课笔记

[3-1] GPIO输出_哔哩哔哩_bilibili 5.GPIO输出 这里&#xff0c;寄存器就是一段特殊的存储器&#xff0c;内核可以通过APB2总线队寄存器进行读写&#xff0c;这样就可以完成输出/读取电平的功能。寄存器的每一位对应一个引脚&#xff0c;stm32是32位的&#xff0c;这里的寄存器…

K8S有了Service,为什么还要Ingress?

1、有了Service为什么还要Ingress? NodePort对外暴露端口存在的不足&#xff1a; 一个端口只能一个服务使用, 端口需要提前规划。 随着业务扩展, 端口的管理将是一个头疼的问题 只支持4层的负载均衡 LoadBalancer存在的不足&#xff1a; 贵、贵、贵。 要上云(俗话说上云…

前端Vue自定义顶部搜索框:实现热门搜索与历史搜索功能

前端Vue自定义顶部搜索框&#xff1a;实现热门搜索与历史搜索功能 摘要&#xff1a; 随着前端开发复杂性的增加&#xff0c;组件化开发成为了提高效率和降低维护成本的有效手段。本文介绍了一个基于Vue的前端自定义顶部搜索框组件&#xff0c;该组件不仅具备基本的搜索功能&am…