IO流

C++:C++的IO流 一篇带你完全掌握C++的IO流 阅读详情
1.什么是IO流

流: 一种比喻.把数据传输的过程比喻成流
I: Input 输入流
O: Output 输出流

在这里插入图片描述

2.IO流的分类

a.根据流的流向:
输入流
输出流
b.根类流操作的数据类型:
字节流
字符流

3.Java中IO的四大流

字节输出流: OutputStream(抽象类)
字节输入流: InputStream(抽象类)

字符输出流: Writer(抽象类)
字符输入流: Reader(抽象类)

Java中所有的流都是以上四种的某一种的子类,并且所有流的命名是非常规范:
流的命名: 功能+父类名
比如:
FileWriter: 向文件中写以字符为单位的数据
FileOutputStream:向文件中写以字节为单位的数据

4.字节流
  • 万物皆对象和IO流一切皆字节

在学习Java时,万物皆对象思想!
在学习IO流时,一切皆字节!!
我们电脑上所有文件的底层最终都是字节(都是010101二进制)
注意:
a.为什么打开文件后看到的不是010101呢?
因为我们是用软件打开他的,软件会将0101进行解析,解析成对应的文字,图片,声音,画面等…
b.能不能不用解析,就想看到0101这些数据呢?
可以!使用二进制查看器软件即可打开!BinaryViewer!

  • 字节输出流

顶层父类: OutputStream (抽象类)

共性方法:
public void close();//关闭该流,释放资源
public void flush();//刷新缓冲区(对于字节输出流来说没用!!)
public void write(int b);//写一个字节
public void write(byte[] bs);//写一堆字节
public void write(byte[] bs,int startIndex,int length);//写一堆字节的一部分

  • FileOutputStream类的使用

文件的字节输出流:向文件中写以字节为单位的数据!!

a.构造方法

public FileOutputStream(String filepath);//指定文件路径
public FileOutputStream(File file);//指定文件对象

/**
 * FileOutputStream的构造方法
 */
public class FileOutputStreamDemo01 {
    public static void main(String[] args) throws FileNotFoundException {
        //1.创建FileOutputStream对象
        FileOutputStream fos = new FileOutputStream("1.txt");
//        FileOutputStream fos = new FileOutputStream(new File("1.txt"));
        /**
         * 以上构造干了三件事!
         * a.创建对象fos
         * b.判断文件是否存在
         *      如果存在,清空文件内容
         *      如果不存在,则自动创建一个
         * c.让对象fos和文件1.txt绑定在一起
         */
    }
}

b.写字节数据的三个方法

public void write(int b);//写一个字节
public void write(byte[] bs);//写一堆字节
public void write(byte[] bs,int startIndex,int length);//写一堆字节的一部分

/**
 * FileOutputStream的write方法
 */
public class FileOutputStreamDemo02 {
    public static void main(String[] args) throws IOException {
        //1.创建FileOutputStream对象
        FileOutputStream fos = new FileOutputStream("1.txt");
        //2.写字节数据
        //a.写一个字节
        fos.write(97);//0110 0001
        //问题:我想打开1.txt之后看到97,怎么做??
        fos.write(57);
        fos.write(55);
        //b.写一堆字节
        byte[] bs = {106,97,118,97};
        fos.write(bs);
        //问题:我想向文件中写入 ILOVEJAVAHELLOWORLD
        byte[] bs1 = "ILoveJava!HelloWorld".getBytes();
        fos.write(bs1);
        //c.写一堆字节的一部分
        byte[] bs2 = {106,97,118,97};
        fos.write(bs2,1,2);
    }
}

c.如何追加续写

非常简单!! 只要使用下面的构造即可!!
public FileOutputStream(String filepath,boolean append);//指定文件路径
public FileOutputStream(File file,boolean append);//指定文件对象

/**
 * FileOutputStream的追加/续写
 */
public class FileOutputStreamDemo03 {
    public static void main(String[] args) throws IOException {
        //1.创建FileOutputStream对象
        FileOutputStream fos = new FileOutputStream("1.txt",true);//true就代表追加
		//追加写入
        fos.write("Java".getBytes());
    }
}

d.如何换行

非常简单,只需要向文件中写入代表换行的字节即可
windows: \r\n
Linux: \n
mac: \r

/**
 * FileOutputStream的换行
 */
public class FileOutputStreamDemo04 {
    public static void main(String[] args) throws IOException {
        //1.创建FileOutputStream对象
        FileOutputStream fos = new FileOutputStream("2.txt");

        for (int i = 0; i < 10; i++) {
            fos.write("Java\r\n".getBytes());
//            fos.write("\r\n".getBytes());
        }
    }
} 

close和flush

close方法,称为释放资源
注意:当某个流使用完毕之后,务必释放资源

flush方法,称为刷新缓冲区

- .字节输入流InputStream

顶层父类:InputStream(抽象类)
共性方法:
public void close();释放资源
public int read();//读取一个字节
public int read(byte[] bs);//读取一堆字节,返回值代表实际读取的字节个数

  • FileInputStream类的使用

文件的字节输入流:从文件中以字节为单位读取数据

a.构造方法

public FileInputStream(String filepath);指定文件路径
public FileInputStream(File file);指定文件对象

/**
 * FileInputStream的构造方法
 */
public class FileInputStreamDemo01 {
    public static void main(String[] args) throws FileNotFoundException {
        //1.创建FileInputStream对象
        FileInputStream fis = new FileInputStream("1.txt");
//        FileInputStream fis = new FileInputStream(new File("1.txt"));
        /**
         * 以上构造干了三件事!!
         * a.创建对象fis
         * b.判断文件是否存在
         *      如果存在,就存在,不会清空!!!
         *      如果不存在,直接抛出FileNotFoundException异常
         * c.绑定fis和1.txt
         */
    }
}  

b.读取一个字节

/**
 * FileInputStream的read
 */
public class FileInputStreamDemo02 {
    public static void main(String[] args) throws IOException {
        //1.创建FileInputStream对象
        FileInputStream fis = new FileInputStream("1.txt");
        //2.一次读取一个字节
        //int b = fis.read();
        //System.out.println((char)b);
        //==========一次读取一个字节的标准循环代码===========
        int b = 0;//用来保存读取的字节
        /**
         * (b = fis.read()) != -1
         * 以上代码干了三件事!!
         * a.先读 fis.read()
         * b.赋值 b = 读到的字节
         * c.判断 b != -1
         */
        while ((b = fis.read()) != -1) {
            System.out.println((char) b);
        }

        //3.释放资源
        fis.close();
    }
}

c.读取一个字节数组

/**
 * FileInputStream的read
 */
public class FileInputStreamDemo03 {
    public static void main(String[] args) throws IOException {
        //1.创建FileInputStream对象
        FileInputStream fis = new FileInputStream("1.txt");
        //2.一读取一个字节数组
//        byte[] bs = new byte[4];
//        int len = fis.read(bs);
//        System.out.println("本次读取"+len+"个字节!");
//        System.out.println("内容是:"+ new String(bs,0,len));
        //=========一次读取一个字节数组的标准循环代码==========
        byte[] bs = new byte[4];
        int len = 0;
        /**
         * (len = fis.read(bs)) != -1
         * 以上代码干了三件事!
         * a.读取 fis.read(bs)
         * b.赋值 len = 实际读取的个数
         * c.判断 len != -1
         */
        while ((len = fis.read(bs)) != -1) {
            System.out.print(new String(bs,0,len));
        }

        //3.释放资源
        fis.close();
    }
}

在这里插入图片描述

  • 字节流练习:复制图片[笔试题]
    a.复制文件的过程(画图)
    在这里插入图片描述
    b.代码实现(代码演示)
public class CopyFileDemo {
    public static void main(String[] args) throws Exception {
        //源文件:G:\\upload\\444.png
        //目标文件: copy.png
        long start = System.currentTimeMillis();
        copy02();
        long end = System.currentTimeMillis();
        System.out.println("耗时:"+(end-start)+"毫秒");
    }

    /**
     * 一次读取一个字节数组
     * 耗时:8毫秒
     */
    public static void copy02() throws IOException {
        //1.创建 两个流
        FileInputStream fis = new FileInputStream("G:\\upload\\444.png");
        FileOutputStream fos = new FileOutputStream("copy.png");
        //2.复制
        byte[] bs = new byte[1024];
        int len = 0;
        while ((len = fis.read(bs)) != -1) {
            fos.write(bs,0,len);
        }
        //3.释放资源
        fos.close();
        fis.close();
    }

    /**
     * 一次读取一个字节
     * 耗时:4401毫秒
     */
    public static void copy01() throws Exception {
        //1.创建 两个流
        FileInputStream fis = new FileInputStream("G:\\upload\\444.png");
        FileOutputStream fos = new FileOutputStream("copy.png");
        //2.复制
        int b = 0;
        while ((b = fis.read()) != -1) {
            fos.write(b);
        }
        //3.释放资源
        fos.close();
        fis.close();
    }
}
C++IO流 在C语言中,如果想将一个整形变量的数据转化为字符串格式,如何去做呢?1.使用itoa()函数2.使用sprintf()函数都需要先给出保存结果的空间,那空间要给多大呢,这就不太好界定,但两个函数在转化时而且转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。在C++中,可以使用stringstream类对象来避开此问题,在程序中如果想要使用stringstream,必须要包含头文件<sstream>。 阅读详情

相关推荐

嵌入式系统存储体系

主要分为三种:高速缓存(cache)、主存和外存。

weixin_43586667的博客 2265

【C++】IO流

本篇文章概述了C语言与C++中的输入输出机制。首先介绍了C语言的输入输出基础,随后解释了流的概念。接着详细探讨了C++中的IO流,包括标准IO流和文件IO流(涉及二进制与文本读写)。此外,还简要介绍了stringstream的用途。希望本篇文章对大家学习IO流有所帮助。

是阿建吖! 2660

STM32 无线充电接收端硬件设计:从 LC 谐振到 PWM 控制的 5 大关键电路解析

本文深入解析了基于STM32的无线充电接收端硬件设计,重点探讨了LC谐振倍压整流、INA282电流采样、IR2104S半桥驱动、超级电容保护及STM32最小系统等5大关键电路。针对超级电容的恒功率充电需求,详细介绍了PID控制算法优化及PCB设计实战要点,帮助工程师提升无线充电系统的效率和可靠性。

weixin_31774841的博客 384

C++三大IO流类总结——标准IO流、文件IO流、内存IO流

C++三大IO流类总结——标准IO流、文件IO流、内存IO流 IO流类一览标准IO流标准IO流的条件状态条件状态标志条件状态函数标准IO流的输入输出成员函数代码示例条件状态put和get函数getline函数标准IO的格式控制输出格式控制缓冲区控制控制bool类型格式进制控制其他常用输出格式控制输入格式控制文件输入输出流字符串输入输出流类 IO流类一览 ios:流基类(抽象类) istrea...

black_kyatu的博客 5198

内部威胁论文阅读笔记(CMU-CERT专场)

在网上看了很多介绍该数据集的博客,一直有个疑问,这个数据集的标注在哪,本着先入为主的想法结合现有的资料对这个数据集的结构做了一下猜测(可能还是不严谨和正确)1.标注在哪2.什么是密集针模型3.场景文章连接内部人员由于可以绕过安全检测发起攻击,通常最有害的攻击被认为是内部人员发起。通过分析用户行为来检测内部威胁,主要分析一些类时间和活动进行特征选择。选择特征向量用于训练。采用cmu-certr4.2用于训练。提出的算法与。

Jerry的博客 2802

URScript介绍

优傲机器人(Universal Robots)是丹麦工业协作机器人制造商,2005年成立,2015年被泰瑞达收购。其自研编程语言URScript基于Python语法,专为机器人控制优化,支持运动指令、IO控制等功能,具有类Python的简洁语法和实时性特点。URScript提供丰富的API,支持变量赋值、条件判断、循环及函数定义等编程结构,参数按值传递。用户可通过该语言在Polyscope界面编写程序,实现自动化任务。目前优傲在全球20多个办事处为多国客户提供服务。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 603

【C++】————IO流

1.一个冷知识:屏蔽力是一个人最顶级的能力,任何消耗你的人和事,多看一眼都是你的不对。2.你不用变得很外向,内向挺好的,但需要你发言的时候,一定要勇敢。正所谓:君子可内敛不可懦弱,面不公可起而论之。3.成年人的世界,只筛选,不教育。4.自律不是6点起床,7点准时学习,而是不管别人怎么说怎么看,你也会坚持去做,绝不打乱自己的节奏,是一种自我的恒心。5.你开始炫耀自己,往往都是灾难的开始,就像老子在《道德经》里写到:光而不耀,静水流深。

bhbcdxb123的博客 2695

【AI学习笔记】Coze平台实现将Excel文档批量导入数据库全过程

通过Coze平台实现将Excel文档批量导入数据库的全流程,包括B站现有参考教程全方位解读、自己实操的一些BUG解决过程,以及一些疑难问题的探索。

bailichen800的博客 8825

【C++】IO库 && IO流

【C++】 IO库 && IO流,一文带你搞懂C++的 IO流

tan_run的博客 1999

【板栗糖GIS】新装ArcGIS必调的12个隐藏设置——【效率翻倍指南】

本文详细介绍了新装ArcGIS后必调的12个隐藏设置,涵盖性能优化、路径管理、显示调校、工作流定制等方面,帮助用户显著提升GIS工作效率。从关闭后台地理处理到启用硬件加速,再到个性化快捷键配置,这些实用技巧能让ArcGIS运行更流畅,操作更便捷。

weixin_42524945的博客 544

链接文件及功能安全:Hightec如何将Flash驱动放进RAM

Fls本身是无法操作自身的,犯冲突。Fls_WriteCmdCycles (预留300字节)与 Fls_EraseCmdCycles(预留200字节) 函数在执行之前将会Copy进RAM,Fls本身是不能操作Fls本身的,除非把最底层的驱动函数防止在RAM或者其他的Flash里面,假设Flash放置在PF0可以操作PF1。英飞凌的驱动有个规定写指令预留300字节,擦除指令预留200字节。

梦想技术家 2142

C++的IO流

文章目录C语言的输入与输出流是什么C++标准IO流C++文件IO流stringstream的介绍 C语言的输入与输出 在C语言当中,我们使用最频繁的输入输出方式就是scanf与printf: scanf: 从标准输入设备(键盘)读取数据,并将读取到的值存放到某一指定变量当中。 printf: 将指定的数据输出到标准输出设备(屏幕),使用时需要注意宽度输出和精度输出的控制。 C语言借助了相应的缓冲区来进行输入与输出,如下图所示: 对输入输出缓冲区的理解: 可以屏蔽掉低级I/O的实现。 低级I/O的实现依

2021dragon的博客 5092

【二】MADDPG多智能体算法实现(parl)【追逐游戏复现】

论文全称:Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments 论文原文:https://download.youkuaiyun.com/download/sinat_39620217/16203960 论文翻译:https://blog.youkuaiyun.com/qiusuoxiaozi/article/details/79066612 ...

丨汀、的博客 2万+

C++ 的IO流(标准IO流 和文件IO流)

IO流

m0_73751295的博客 1547

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C++之IO流

C++之IO流

2302_81120572的博客 1267

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++ IO流

C语言中用sprintf可以整型转字符串C++中可以用ostringstream,自定义类型转字符串ostringstream是ostream的派生类这里的oss<<d,去调用的是ostream&operator<<,本质上都会以字符串的形式进去out,然后再用str函数取出这个字符串,用string接收。

ljw的博客 1711

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【C++进阶】IO流

C++IO流详解

m0_60338933的博客 3075

【c++】c++的IO流

一、c语言的输入输出 二、流是什么? 三、c++的三种IO流 c++标准IO流 c++的文件IO流 二进制读写 文本读写 c++的字符串流 总结

重铸自身根基的博客 968

io流

IO流 java.io包 1.什么是流? io流就是java中运输数据的一种载体 它能够把数据从一个地方运输到另一个地方 2.流的分类 a 根据流运输数据的方向<以内存为参考物> 输入流 输出流 b 根据数据传输时转换的类型 字节流 byte 字符流 char ...

qq_40977337的博客 3267

【Java IO流】IO流详解

IO,即InputOutput,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括磁盘文件、管道、网络连接Java中是通过流处理IO的,那么什么是流?流(Stream),是一个抽象的概念,是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道当Java程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是磁盘文件、内存、网络连接等等。类似地,当Java程序需要写入数据的时候,就会开启一个通向目的地的流。

m0_55908255的博客 1695

【C++】IO 流

class Apublic://explicit A(int a) // explicit不允许隐式类型转换A(int a):_a(a){}return _a;int main()// 内置类型转换成自定义类型A aa1 = 1;// 隐式类型转换 用1构造A临时对象,再拷贝构造aa1,优化后直接1构造aa1// 自定义类型转换成内置类型// 隐式类型转换,如果加上explicit,就会报错:不存在从A到int的适当转换函数// 强制类型转换。

m0_46676283的博客 902

Java IO流之IO流基础

IO流介绍 IO基础之File类 IO流之字符流 IO流之字节流 IO流之Scanner类

Mr.mooye 2848
上一篇: 人用迭代 神用递归
下一篇: 字符流
lemon20120331
博客等级 码龄9年 277粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemon20120331

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值