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

news2024/9/23 19:17:53

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区: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 !!!


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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tensors张量操作

定义Tensor 下面是一个常见的tensor&#xff0c;包含了里面的数值&#xff0c;属性&#xff0c;以及存储位置 tensor([[0.3565&#xff0c;0.1826&#xff0c;0.6719],[0.6695&#xff0c;0.5364&#xff0c;0.7057]]&#xff0c;dtypetorch.float32,devicecuda:0)Tensor的属…

Vue2 Element-UI 分页组件el-pagination 修改 自带的total、跳转等默认文字

场景需求&#xff1a; Vue2 Element-UI 分页组件el-pagination 修改 自带的total、跳转等默认文字。如下图&#xff1a;默认提示字变成了英文&#xff0c;如何将其 变成 汉字提示呢&#xff1f; 解决方案&#xff1a; 1.方案1&#xff1a;修改DOM内容 不提倡此方案&#xf…

这个springboot项目好用!毕设、学习提升

最近好多小伙伴过来问 V 哥关于毕业设计项目的事情&#xff0c;对于计算机类的同鞋们来说还是为难的&#xff0c;自己在学校掌握的技术栈比较少&#xff0c;要完成一个解决某领域业务的实用性项目&#xff0c;难度还是不小的&#xff0c;这得从需求分析&#xff0c;功能设计&am…

大语言模型训练部署流程及步骤

01.确定需求大小 在构建大语言模型的前期准备中&#xff0c;基础设施是最为重要的&#xff0c;GPU的型号以及数据直接关系到模型的训练质量和训练时间。例如&#xff1a;使用单个V100的GPU训练具有1750亿个参数的GPT-3将需要约288年&#xff0c;那就更不用提现在动辄万亿参数的…

react-d3-tree:React组件创建交互式D3树形图

在这里插入代码片import React from "react"; import ReactDOM from "react-dom"; import Tree from "react-d3-tree";import "./styles.css";const myTreeData [{name: "Gaurang Torvekar",attributes: {keyA: "val …

基础7 探索JAVA图形编程桌面:数据库操作组件详解

在当今这个全面以数字化占据主导地位的时代&#xff0c;图形化编程犹如一颗冉冉升起的新星&#xff0c;逐渐在编程领域中崭露头角&#xff0c;并且正逐步成为一种全新的趋势。其具备的直观性以及易上手的显著特性&#xff0c;使得数量愈发庞大的开发者以及业务人员能够以更为快…

ENVI6.0试用版(180天)详细安装教程,附安装包链接和一些常见问题

ENVI6.0试用版&#xff08;180天&#xff09;详细安装教程&#xff0c;附安装包链接和一些常见问题 文章目录 ENVI6.0试用版&#xff08;180天&#xff09;详细安装教程&#xff0c;附安装包链接和一些常见问题前言环境来源安装激活问题 前言 如标题所示&#xff0c;这个只是试…

文本三剑客之 sed 编辑器

一.sed 概述 1.sed 介绍 sed是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据&#xff0c;这些命令要么从命令行中输入&#xff0c;要么存储在一个 命令文本文件中。 2.sed 的工…

基于51单片机的电压表设计—0~5V

基于51单片机的电压表设计 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.ADC0832模数转换芯片实现电压的测量&#xff1b; 2.测量电压精确到0.01V&#xff1b; 3.测量范围默认是0~5v&#xff1b;…

汽车合面合壳密封UV胶固化后能持续多久密封呢?汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

汽车合面合壳密封UV胶固化后能持续多久密封呢&#xff1f; UV胶在汽车合面合壳密封后的持久性取决于多种因素&#xff0c;包括UV胶的配方、环境条件、应力和使用情况等。一般而言&#xff0c;UV胶固化后的密封性能可以持续数年&#xff0c;我们可以从以下几个方面进行归纳&…

长难句打卡5.27

In fact, allowing non-lawyers to own shares in law firms would reduce costs and improve services to customers, by encouraging law firms to use technology and to employ professional managers to focus on improving firms’efficiency. 事实上&#xff0c;这通过…

AI日报|阿里8亿美元购入月之暗面36%股份,Meta首席杨立昆建议不要研究大模型...

文章推荐 阿里通义降价&#xff0c;百度文心免费&#xff0c;一图对比谁是最具性价比大模型&#xff1f; 阿里投资Kimi AI开发商月之暗面&#xff1a;8亿美元购入约36%股权 阿里巴巴在2024财年向AI初创企业月之暗面投资约8亿美元&#xff0c;购入其约36%股权。 月之暗面成立…

山东籍当代文化名人颜廷利起名大师的故事背景和历史背景

山东籍当代文化名人颜廷利起名大师的故事背景和历史背景 在当代中国文化界&#xff0c;全国排名第一是起名大师颜廷利教授的名字犹如一座学术高峰&#xff0c;其影响力横跨海内外。身为一位深受全球华人尊崇的学者&#xff0c;他的思想与教诲在国际间播撒着智慧的种子&#xff…

苹果WWDC 2024或将推出AI生成的表情符号并宣布与OpenAI的合作|TodayAI

苹果正在为即将到来的WWDC&#xff08;全球开发者大会&#xff09;做准备&#xff0c;并将展示其生成式AI技术。根据Mark Gurman在Bloomberg的《Power On》通讯中的报道&#xff0c;苹果将在2024年的WWDC上讲述自己的AI故事&#xff0c;但这可能不会像Google、Microsoft或OpenA…

全球前五!ATFX 2024年Q1业绩狂飙,6240亿美元交易量彰显实力

5月&#xff0c;密集发布的报告显示&#xff0c;强者恒强是差价合约行业不变的竞争逻辑。而ATFX最新展现的业绩无疑是这一逻辑的有力例证。依照惯例&#xff0c;知名行业媒体Finance Magnates日前公布了全球经纪商最为关注的2024年第一季度行业报告。报告数据显示&#xff0c;A…

智慧校园建设规划方案

在信息化浪潮的推动下&#xff0c;智慧校园的建设已成为教育现代化的必然趋势。以创新科技赋能教育&#xff0c;打造智慧校园&#xff0c;旨在提升教学品质&#xff0c;优化管理流程&#xff0c;增强学生体验。构建智慧校园需要具有前瞻性的规划方案&#xff0c;它将以教育为核…

LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]

LLM 大模型学习必知必会系列(十二)&#xff1a;VLLM性能飞跃部署实践&#xff1a;从推理加速到高效部署的全方位优化[更多内容&#xff1a;XInference/FastChat等框架] 训练后的模型会用于推理或者部署。推理即使用模型用输入获得输出的过程&#xff0c;部署是将模型发布到恒定…

用友电子凭证解决方案,加速企业电子凭证全链路管理

2023年&#xff0c;财政部等9部委联合推进电子凭证数据标准及试点工作&#xff0c;目前逐步扩大试点范围&#xff0c;覆盖市场应用高频的9类凭证。2024年&#xff0c;财政部办公厅发布了《关于继续开展电子凭证会计数据标准深化试点工作的通知》对电子凭证进行全流程常态化处理…

google浏览器下载和相应驱动下载

1、chromedriver 115及115之后版本下载地址&#xff1a; https://googlechromelabs.github.io/chrome-for-testing/ 2、chromedriver 115之前版本下载地址&#xff08;已停止更新115及之后版本&#xff09;&#xff1a; http://chromedriver.storage.googleapis.com/index.html…

前端开发工程师——数据可视化

canvas canvas绘制线段 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthd…