java基础之 IO 流(InputStream/OutputStream)

2023-11-15

基流 

上图中有句话写错了,应该是 字节流的根类。

文件输出/入字节流

 代码示例

心得:

  1. 读写文件流 关心 读的时候读多少,写的时候写多少,它没有限制一次只能读/写多少。
  2. 文件流的创建 到 文件流的关闭 为一个周期。
package IOTest;

import java.io.*;

/**
 * ClassName: RandomAccessFileTets <br/>
 * Description: <br/>
 * date: 2021/8/2 19:47<br/>
 *
 * @author yiqi<br />
 * @since JDK 1.8
 */
public class RandomAccessFileTets {
    public static void main(String[] args) throws Exception {
        //第一步:创建一个文件输入流
        FileInputStream fis = new FileInputStream("src/IOTest/test.txt");
        //第二步:创建一个文件输出流
        FileOutputStream fos = new FileOutputStream("src/IOTest/clone.txt",true);
        //第四步:规定一次性读取数据长度
        byte[] buffer = new byte[1024];
        while (true){
            //第三步:读取数据
            int len = fis.read(buffer);
            if (len == -1){
                break;
            }
            fos.write(buffer,0,len);
        }
        //关闭流
        fis.close();
        fos.close();
    }
}

 ByteArray字节流

 代码示例:

心得:

  1.  ByteArrayInputStream 主要作用是与内存数据互动,如果要与介质(如文件,网络,控制台)互动,还是得创建 文件流 (FileXXXStream)的
package IOTest;

import java.io.*;

/**
 * ClassName: RandomAccessFileTets <br/>
 * Description: <br/>
 * date: 2021/8/2 19:47<br/>
 *
 * @author yiqi<br />
 * @since JDK 1.8
 */
public class RandomAccessFileTets {
    public static void main(String[] args) throws Exception {
        String str = "关注我,不迷路---我想月薪过万的CSDN";
        //第一步:创建 ByteArrayInputStream
        ByteArrayInputStream bais = new ByteArrayInputStream(str.getBytes());
        //第二步:创建 ByteArrayOutputStream 参数 size 不写也没关系
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        //第三步:创建 FileOutputStream ,因为 FileOutputStream 是节点流 ,只有它 才能和 文件介质互动
        FileOutputStream fos = new FileOutputStream("src/IOTest/123.txt");
        //第四步:文件读写
        //规定一次读取数据大小
        byte[] buffer = new byte[1024];
        while (true){
            int len = bais.read(buffer);
            if (len == -1){
                break;
            }
            baos.write(buffer,0,len);
        }
        //写入文件
        baos.writeTo(fos);
        //关闭流
        bais.close();
        baos.close();
        fos.close();
    }
}

 效果展示

 Data字节流

代码示例

心得:

  1. 感觉这个累的左右就是  FileXXXStream() 本身
  2. 但是他有个优点,从上面第二章api图就可以看出,他是数据处理流,可以直接获取 java 的各个数据类型
package IOTest;

import java.io.*;

/**
 * ClassName: RandomAccessFileTets <br/>
 * Description: <br/>
 * date: 2021/8/2 19:47<br/>
 *
 * @author yiqi<br />
 * @since JDK 1.8
 */
public class RandomAccessFileTets {
    public static void main(String[] args) throws Exception {
        //创建输入流
        DataInputStream dis = new DataInputStream(new FileInputStream("src/IOTest/test.txt"));
        //创建输出流
        DataOutputStream dos = new DataOutputStream(new FileOutputStream("src/IOTest/clone.txt"));
        //读写数据
        byte[] buffer = new byte[1024];
        while (true){
            int len = dis.read(buffer);
            if (len == -1){
                break;
            }
            dos.write(buffer,0,len);
        }
        //关闭流
        dis.close();
        dos.close();
    }
}

缓冲字节流 

代码示例

package IOTest;

import java.io.*;

/**
 * ClassName: RandomAccessFileTets <br/>
 * Description: <br/>
 * date: 2021/8/2 19:47<br/>
 *
 * @author yiqi<br />
 * @since JDK 1.8
 */
public class RandomAccessFileTets {
    public static void main(String[] args) throws Exception {
        //创建输入流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("src/IOTest/test.txt"));
        //创建输出流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("src/IOTest/clone.txt"));
        //读写数据
        byte[] buffer = new byte[1024];
        while (true){
            int len = bis.read(buffer);
            if (len == -1){
                break;
            }
            bos.write(buffer,0,len);
            bos.flush();//当缓冲区装满了之后,自动导出
        }
        //关闭流
        bis.close();
        bos.close();
    }
}

总结

基流:InputStream、OutputStream

与文件打交道的节点流:FileInputStream、FileOutputStream

与内存打交道的节点流:ByteArrayInputStream、ByteArrayOutputStream

处理流:DataInputStream、DataOutputStream ||| BufferedInputStream、BufferedOutputStream

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java基础之 IO 流(InputStream/OutputStream) 的相关文章

  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • html / css 基础面试题 --- 页面导入时,使用link与@import有什么区别?

    页面导入时 使用link与 import有什么区别 标签和 import指令都可以用于在HTML文档中导入CSS样式表 尽管它们都可以实现相同的目的 但它们之间还是存在一些差异 1 加载顺序 当浏览器解析到标签时 会立即下载并应用样式表 这
  • Sigmoid函数使用教程

    Sigmoid函数是一种常用的激活函数 它将输入值映射到一个范围在0到1之间的连续输出 Sigmoid函数的公式如下 scss f x 1 1 exp x 以下是使用Sigmoid函数的Python示例代码 pythonCopy code
  • 六、MATLAB入门—文件操作

    文章目录 前言 一 文件的打开与关闭 1 1 文件的打开 1 2 文件的关闭 二 文件的读写操作 2 1 二进制文件的读写操作 2 2 文本文件的读写操作 三 数据文件定位 总结 前言 经过前面一段时间的学习 相信大家已经能较为熟练的在MA
  • Mini AHRS 姿态解算说明

    本文旨在讲解以下内容 1 加速度 2 陀螺仪 3 磁力计 0 序言 一直想写篇文章关于姿态解算原理的 使用尽量通俗的语句说明如何从加速度计和陀螺仪的数据 融合得到载体的姿态角 无奈自己的水平有限 一直搁置 淡泊以明志 宁静以致远 人总是要逼
  • 计算机网络实验报告 静态路由的配置

    实验名称 静态路由的配置 一 实验目的 1 掌握路由器的配置 2 学会配置静态路由 3 实现静态路由的不同网络间的互通 二 实验内容 1 搭建拓扑图 2 网络拓扑节点IP配置 3 静态路由配置实现不同网络的通信 三 实验环境 GNS3是一款
  • 七大排序之归并排序

    文章目录 什么是归并排序 归并排序代码 归并排序相关习题 148 排序链表 剑指 Offer 51 数组中的逆序对 总结 什么是归并排序 归并排序的思想 将原数组不断拆分 一直拆到每个子数组只有一个元素时 第一阶段结束 然后开始 并 将相邻
  • Databend 开源周报第 110 期

    Databend 是一款现代云数仓 专为弹性和高效设计 为您的大规模分析需求保驾护航 自由且开源 即刻体验云服务 https app databend cn What s On In Databend 探索 Databend 本周新进展 遇
  • 踩坑日记(一)

    1 Vue 错误 Uncaught TypeError Object is not a function at eval vue router esm bundler js vue router版本太高了 需降低版本 降为 3 5 3 可参
  • VUE3 之 条件渲染

    目录 1 概述 2 条件渲染 3 综述 4 个人公众号 1 概述 老话说的好 要锻炼逆向思维 人取我弃 人弃我取 言归正传 今天我们来聊聊 VUE3 的条件渲染 2 条件渲染 2 1 v if div div
  • 全手工杂拌面——韩国才有的中华料理 冬至餐桌上的25道家常手工主食

    这是一道韩国特有的中餐 全手工海鲜杂拌面 面条以鸡蛋 面粉和成 不加一滴水 汤则由鸡骨头经过数小时熬制而成的汤底制作而成 从汤到面一律手工打造 彻底抛弃了现成的面条 速食的鸡汤 符合眼下反对快餐食品 提倡有个性及营养均衡的传统美食的慢食文化
  • MySQL-高级处理

    第五章 SQL高级处理 5 1 窗口函数 5 1 1 窗口函数概念及基本的使用方法 窗口函数也称为OLAP函数 OLAP 是 OnLine AnalyticalProcessing 的简称 意思是对数据库数据进行实时分析处理 为了便于理解
  • QT--收发数据代码

    1 pro QT core gui QT serialport QT widgets QT core 2 h ifndef JTLTESTTOOL H define JTLTESTTOOL H include
  • 【半监督学习】2、Soft Teacher

    文章目录 一 背景 二 方法 2 1 End to End Pseudo Labeling Framework 2 2 Soft teacher 2 3 Box Jittering 三 实验 论文 End to End Semi Super
  • python3+robotframework3+selenium3分层设计和截图及注意事项

    再说一下目前的主要环境信息和版本 操作系统 win10 64位 python版本 3 9 0 RIDE版本 v2 0b2 dev1 robotframework seleniumlibrary 3 141 0 selenium 3 141
  • C语言的数据类型大全,整型数据在内存中的存储方式

    一 数据类型 通过长时间的学习C语言以及代码的编写 我掌握了很多很多的数据类型 下面就给大家罗列一下 1 内置数据类型 char 字符数据类型 所占内存空间1字节 short 短整型 所占内存空间2字节 int 整形 所占内存空间4字节
  • java 超市购物程序设计

    编写一个超市购物程序 在一家超市有以下商品 牙刷 8 8元 毛巾 10 0元 水杯 18 8元 苹果 12 5元 香蕉 15 5元 用户通过输入商品序列号进行商品购买 用户输入购买数量后计算所需花费的钱 一次购买后 按Y继续购买 N购买结束
  • shell脚本学习笔记 (sed的高级用法----模式空间和保持空间)

    前段时间在学习shell脚本 上次有提到sed的模式空间和保持空间概念 但是一直没有研究好 这两天研究了一下 所以将它发出来 不是很全面 仅仅供大家参考一下 保持空间sed在正常情况下 将处理的行读入模式空间 脚本中的 sed comman
  • ES词典热加载-通过修改ik分词器源码实现热加载自定义词典

    逻辑 自定义词典的数据从mysql加载 只需要重启一次ES即可 后续热加载 实现 在自定义词典的init方法中实现每隔一定时间读取mysql并写入自定义词典的逻辑
  • 【微信小程序】小程序之滚动页面的某个元素位置

    这种效果基本上都是在文章详情页面才会出现 用于点击按钮页面滚动到文章的评论位置 但是不排除可以用于别的功能 首先我们需要用到的是在小程序里面获取某一个元素的位置高度 var that this var flag that data flag
  • java基础之 IO 流(InputStream/OutputStream)

    基流 上图中有句话写错了 应该是 字节流的根类 文件输出 入字节流 代码示例 心得 读写文件流 关心 读的时候读多少 写的时候写多少 它没有限制一次只能读 写多少 文件流的创建 到 文件流的关闭 为一个周期 package IOTest i