IO流~字节流

news2024/11/28 18:42:06

字节流

IO流分类

  • 按照数据的流向:输入流:读数据\输出流:写数据
  • 按照数据类型来分
    • 字节流:字节输入流;字节输出流
    • 字符流:字符输入流;字符输出流

一般来说,IO流的分类是按照数据类型来分的

  • 如果数据通过Window自带的记事本软件打开,我们还可以读懂里面的内容,就使用字符流
  • 否则使用字节流。如果不知道该使用哪种类型的流,就使用字节流

字节流写数据

字节流抽象基类

  • InputStream:这个抽象类是表示字节输入流的所有类的超类
  • OutputStream:这个抽象类是表示字节输出流的所有类的超类
  • 子类名特点:子类名称都是以其父类名作为子类名的后缀

FileOutputStream:文件输出流用于将数据写入File

  • FileOutputStream(String name):创建文件输出流以指定的名称写入文件

使用字节输出流写数据的步骤:

  • 创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
  • 调用字节输出流对象的写数据方法
  • 释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源)
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamDemo01 {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("myBytesStream\\fos.txt");
        /*
        * 做了三件事情:
        * A:调用系统功能创建了文件
        * B:创建了字节流输出对象
        * C:让字节输出流对象指向创建好的文件
        * */
        fos.write(97);
        fos.write(57);
        fos.write(55);
        //释放资源
        fos.close();
    }

结果

在这里插入图片描述

字节流写数据的三种方式

在这里插入图片描述

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamDemo02 {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("myBytesStream\\fos.txt");

        /*File file = new File("myBytesStream\\fos.txt");
        FileOutputStream fos2 = new FileOutputStream(file);*/

        //FileOutputStream fos3 = new FileOutputStream(new File("myBytesStream\\fos.txt"));

        fos.write(97);
        fos.write(98);
        fos.write(99);
        fos.write(100);
        fos.write(101);

        byte[] bys = {97,98,99,100,101};
        fos.write(bys);

        byte[] bytes = "feifei".getBytes();
        fos.write(bytes);

        fos.write(bys,1,3);

        fos.close();
    }
}

结果

在这里插入图片描述

字节流写数据的两个小问题

字节流写数据如何实现换行呢?

  • 写完数据后,加换行符

    window:\r\n

    linux:\n

    mac:\r

字节流写数据如何实现追加写入呢?

  • public FileOutputStream(String name,boolean append)
  • 创建文件输出流以指定的名称写入文件。如果第二个参数为true,则字节将写入文件的末尾而不是开头

字节流写数据加异常处理

finally:在异常处理时提供finally块来执行所有清除操作。比如说IO流中的释放资源

特点:被finally控制的语句一定会执行,除非JVM退出

try{
    可能出现异常的代码;
}catch(异常类名 变量名){
    异常的处理代码;
}finally{
    执行所有清除操作;
}
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStremDemo03 {
    public static void main(String[] args) {
        FileOutputStream fos = null;
        try {
            //fos = new FileOutputStream("Z:myBytesStream\\fos.txt");
            fos = new FileOutputStream("myBytesStream\\fos.txt");
            fos.write("fei".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

在这里插入图片描述

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

public class FileOutputStreamDemo04 {
    public static void main(String[] args) {
        try(FileOutputStream fos = new FileOutputStream("myBytesStream\\fos.txt");){
            fos.write("feiling".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

字节流读数据(一次读一个字节数据)

FileInputStream:从文件系统中的文件获取输入字节

  • FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的路径名name命名

使用字节输入流读数据的步骤:

  1. 创建字节输入流对象
  2. 调用字节输入流对象的读数据方法
  3. 释放资源
import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamDemo01 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("myBytesStream\\fos.txt");
        int by;
        while((by=fis.read())!=-1){
            System.out.print((char)by);
        }
        fis.close();
    }
}
//复制文本文件
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileInputStreamDemo02 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("myBytesStream\\fos.txt");
        FileOutputStream fos = new FileOutputStream("myBytesStream\\fei\\fos.txt");
        int by;
        while ((by = fis.read()) != -1) {
            fos.write(by);
        }
        fis.close();
        fos.close();
    }
}

字节流读数据(一次读一个字节数组数据)

使用字节输入流读数据的步骤:

  1. 创建字节输入流对象
  2. 调用字节输入流对象的读数据方法
  3. 释放资源
import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamDemo03 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("myBytesStream\\fos.txt");
        byte[] bys = new byte[1024];
        int len;
        while ((len = fis.read(bys)) != -1) {
            System.out.println(new String(bys, 0, len));
        }
        fis.close();
    }
}
//复制图片
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileInputStreamDemo04 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("myBytesStream\\111.jpg");
        FileOutputStream fos = new FileOutputStream("myBytesStream\\fei\\111.jpg");
        byte[] bys = new byte[1024];
        int len;
        while((len= fis.read(bys))!=-1){
            fos.write(bys,0,len);
        }
        fis.close();
        fos.close();
    }
}

字节缓冲流

字节缓冲流:

  • BufferedOutputStream:该类实现缓冲输出流。通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用
  • BufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组。当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节

构造方法:

  • 字节缓冲输出流:BufferedOutputStream(OutputStream out)
  • 字节缓冲输入流:BufferedInputStream(InputStream in)

为什么构造方法需要的是字节流,而不是具体的文件或者路径呢?

  • 字节缓冲流仅仅提供缓冲区,而真正的读写数据还得依靠基本的字节流对象进行操作
import java.io.*;

public class BufferStreamDemo {
    public static void main(String[] args) throws IOException {
        /*FileOutputStream fos = new FileOutputStream("myBytesStream\\bos.txt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);*/
        /*BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myBytesStream\\bos.txt"));
        bos.write("hello\r\nworld\r\n".getBytes());*/
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("myBytesStream\\bos.txt"));
        byte[] bys = new byte[1024];
        int len;
        while ((len = bis.read(bys)) != -1) {
            System.out.println(new String(bys,0,len));
        }
        /*bos.close();*/
        bis.close();
    }
}

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

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

相关文章

触发器,寄存器,三态输出电路

目录 一:触发器 二:寄存器(register) 缓冲寄存器 三态输出电路(只看标红的即可)数据总线上很常用 考试会问你触发器,寄存器,存储器是什么关系你知道就行。这个简答题在存储器笔…

基于Java+SpringMvc+Vue求职招聘系统详细设计实现

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取联系🍅精彩专栏推荐订阅👇&#x1f…

Java项目:ssm药品管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 该项目是前后台的医药管理系统(写在了一个web项目里), 简单明了,界面高端大气,共6张…

图的基本表示方法

一、图的基本表示方法 由G(V,E)G (V,E)G(V,E)由下列要素构成: 一组节点:V1,⋯nV 1,\cdots nV1,⋯n一组边E⊆VVE \subseteq V \times VE⊆VV 边(i,j)∈E(i,j) \in E(i,j)∈E 连接了节点i和ji和ji和j i和ji和ji和j被称为相邻节点节点的度:相邻节点的数…

Neo4J入门笔记

1.安装以及启动 Neo4J作为图数据库标准的一个实现,其功能还是非常强大的功能,并支持Cypher查询。目前其提供了3种版本: 桌面版社区版企业版 Neo4J其实现是基于Java实现的,所以JDK的安装是必须的,启动的方式官方文档…

细胞穿膜肽MPG,Mpa-GALFLGFLGAAGSTMGA-OH

嵌合肽家族,来源HIV gp41和猴病毒40T抗原NLS融合序列的一个疏水区 编号: 205074中文名称: 细胞穿膜肽MPG单字母: Mpa-GALFLGFLGAAGSTMGA-OH三字母: Mpa-Gly-Ala-Leu-Phe-Leu-Gly-Phe-Leu-Gly-Ala-Ala-Gly-Ser-Thr-Met-Gly-Ala-COOH氨基酸个数: 17分子式: C73H113O21…

C++入门基础06:简单语句与顺序结构、选择结构if与switch、循环语句、跳转语句、异常处理

C入门基础06&#xff1a;简单语句与顺序结构、选择结构if与switch、循环语句、跳转语句、异常处理 1、简单语句与顺序结构&#xff1a; #include <iostream> //系统定义头文件一般是尖括号 #include<fstream> #include<string> using namespace std;int ma…

资本-劳动力错配指数计算、金融错配指标两大维度指标(内附代码)

一、资本错配和劳动力错配指数计算 1、数据来源&#xff1a;各省级统计年鉴/中国统计年鉴、 2、时间跨度&#xff1a;2000-2019年 3、区域范围&#xff1a;31省市自治区 4、指标说明&#xff1a; 资源的稀缺性决定了经济学研究的一个基本问题就是资源配置&#xff0c;如…

找出你的高价值潜在用户 - 通过归因分析实现用户画像和精准营销

在之前的博客文章 为什么你的用户转化率不高&#xff1f;--新媒体运营转化效果渠道归因分析中&#xff0c;我们讲到 新媒体运营用户转化相关的指标以及目标追踪&#xff0c;以及相关的渠道归因分析。在本篇文章中&#xff0c;我们一起来看看&#xff0c;如何通过 Kyligence Zen…

数据结构:二叉树

目录 树 二叉树 堆 以大堆为例代码实现 功能预览 初始化 销毁 打印 插入数据 删除数据 建堆 获取栈顶元素 获取数组中的元素个数 判空 堆排序 TopK问题 二叉树链式结构的实现 功能预览 二叉树遍历 求节点的总个数 求叶子节点的个数 求树的深度 求第k层的…

零入门容器云网络-5:同一宿主机上的两个网络命名空间通信方案

已发表的技术专栏&#xff08;订阅即可观看所有专栏&#xff09; 0  grpc-go、protobuf、multus-cni 技术专栏 总入口 1  grpc-go 源码剖析与实战  文章目录 2  Protobuf介绍与实战 图文专栏  文章目录 3  multus-cni   文章目录(k8s多网络实现方案) 4  gr…

Android 虚拟分区详解(一) 参考资料推荐

文章目录0. 导读1. Android 官方 VAB 文档1.1 公开文档1.2 半公开文档2. Device Mapper 文档2.1 device mapper 文档2.2 dmsetup 工具2.3 COW 介绍3. Android 源码4. 参考资料汇总5. 后续计划6. 其它Android Virtual A/B 系统简称 VAB&#xff0c;我在这一系列里面又将其称为虚…

【LeetCode每日一题:813. 最大平均值和的分组~~~前缀和+递归+记忆化搜索】

题目描述 给定数组 nums 和一个整数 k 。我们将给定的数组 nums 分成 最多 k 个相邻的非空子数组 。 分数 由每个子数组内的平均值的总和构成。 注意我们必须使用 nums 数组中的每一个数进行分组&#xff0c;并且分数不一定需要是整数。 返回我们所能得到的最大 分数 是多少…

前端面试整理

Js 1. Localstorage、sessionStorage、cookie、session的区别 &#xff08;1&#xff09;web storage和cookie的区别&#xff1a; Cookie(不设置过期时间) sessionStorage WebStorage的目的是克服由cookie所带来的一些限制&#xff0c;当数据需要被严格控制在客户端时&…

C/C++ 深入浅出C++模板(上)

不知道你是否思考过一个问题&#xff0c;那就是为什么C有丰富的库&#xff0c;而C语言却没有&#xff1f;比如说C有STL库&#xff0c;线程库等。其实一个很重要的因素就是因为C引入了泛型编程这个概念&#xff0c;也就是我们熟悉的模板。今天我们就一起来深入理解什么是泛型编程…

如何将文字转语音?这几个软件可以将文字转语音

最近有朋友向我求助说&#xff0c;自己在学校的社团里准备了一个话剧节目&#xff0c;需要为这个节目进行旁白配音&#xff0c;但是里面的台词不仅绕口&#xff0c;还有一些是生僻字&#xff0c;念起来有点困难。要是碰上自己的课程比较多的时候&#xff0c;难以兼顾两边的工作…

使用Apache搭建网站

❤️痛苦不是失败&#xff0c;而是你本可以❤️ 实验环境 CentOS7.3&#xff08;1611&#xff09;版本、Apache2.4&#xff0c;vsftpd3.0 本次实验目的 1.编译安装httpd 2.优化路径 3.并将鲜花网站上传到web服务器为网页目录&#xff08;当然其他网站源码也可以&#xff09;…

CMU 15-213 CSAPP. Ch11. Dynamic Memory Allocation

CMU 15-213 CSAPP (Ch1~Ch3) CMU 15-213 CSAPP (Ch5~Ch7) CMU 15-213 CSAPP (Ch8) CMU 15-213 CSAPP (Ch9) CMU 15-213 CSAPP (Ch10) CMU 15-213 CSAPP (Ch11) 视频链接 课件链接 课程补充 该课程使用 64位 编译器&#xff01; Ch11. Dynamic Memory Allocation 11.1 Basic c…

【附源码】计算机毕业设计JAVA政府人才机构在线考试系统2021

【附源码】计算机毕业设计JAVA政府人才机构在线考试系统2021 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1…

《web课程设计》基于HTML+CSS+JavaScript典的中医药大学网(11个页面)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…