当前位置: 首页 > news >正文

最全面IO流介绍

1.字符集介绍

  • 标准ASCII字符集:使用1个字节存储一个字符,首尾是0,总可以表示128个字符。是美国信息交换标准代码,包含英文、符号等等。

  • GBK汉字编码字符集,包含2万多个汉字等字符,GBK中一个中文字符编码成2个字节的形式存储,GBK兼容了ACSII字符集。GBK规定:汉字的第一个字节的第一位必须是1

  • Unicode字符集:是国际组织规定的,可以容纳世界所有文字、符号的字符集。叫万国码。

    • UTF-32: 4个字节表示一个字符,固定长度,可能只需要1个字节的英文字符现在要用4个字节来存储,太奢侈

    • UTF-8:采取可变长编码方案:共分为4个长度区:1(0xxxxxxx)、2(110xxxxx 10xxxxx)、3(1110xxxx 10xxxxx)、4(11110xxx 10xxxxx 10xxxxx 10xxxxx)个字节

      • 英文字符、数字只占用1个字节,汉字占用3个字节

注意:

  • 开发人员最好都是用UTF-8编码。

  • 字符编码时使用的字符集,和解码时使用的字符集必须一致,不然会出现乱码

  • 英文数字一般不会乱码,英文很多字符集都兼容了ASCII码

2. IO流分类

  • 按流的方向

    • 输入流:将数据从磁盘输入到程序中

    • 输出流:将数据从程序中保存到磁盘上

  • 按数据的最小单位

    • 字节流:适合操作所有类型的文件

    • 字符流:适合读写txt,java文件

3.总体概览图

4.IO流体系

  • 字节流(适合文件的复制)

    • 字节输入流:InputStream---->FileInputStream

      • 作用:把磁盘文件中的数据以字节的形式读取到内存中

      • 常用方法:

        //构造方法:创建字节输入流管道与源文件接通public FileInputStream(File file);public FileInputStream(String name)//方法//每次读取一个字节返回,如果发现没有数据可读会返回-1public int read();//每次用一个字节数组去读取数据,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1public int read(byte[] buffer);
    • 字节输出流: OutputStream---->FileOutputStream

      • 作用:把数据写入文件中并保存在磁盘 

      • 常用方法:

        //构造方法:创建字节输出流管道与源文件接通public FileOutputStream(File file);public FileOutputStream(String filePath)//以下构造方法可以追加数据public FileOutputStream(File file,boolean append);public FileOutputStream(String filePath,boolean append)//方法//写一个字节出去public void write(int a);//写一个字节数组出去public void write(byte[] buffer);//写字节数组的一部分出去public void write(byte[] buffer,int pos, int len);

  • 字符流(适合数据的读取)

    • 文件字符输入流: Reader---->FileReader

      • 作用:把磁盘文件中的数据以字符的形式读取到内存中

      • 常用方法:

        //构造方法:创建字符输入流管道与源文件接通public FileReader(File file);public FileReader(String pathname)//方法//每次读取一个字符返回,如果发现没有数据可读会返回-1public int read();//每次用一个字符数组去读取数据,返回字符数组读取了多少个字符,如果发现没有数据可读会返回-1public int read(char[] buffer);
    • 文件字符输出流: Writer---->FileWriter
      • 作用:把数据写入文件中并保存在磁盘

      • 常用方法:

        //构造方法:创建符节输出流管道与源文件接通public FileWriter(File file);public FileWriter(String filePath)//以下构造方法可以追加数据public FileWriter(File file,boolean append);public FileWriter(String filePath,boolean append)//方法//写一个字符出去public void write(int a);//写一个字符串出去public void write(String s);//写一个字符串的一部分出去public void write(String s,int off, int len);//写一个字符数组出去public void write(byte[] buffer);//写字符数组的一部分出去public void write(byte[] buffer,int pos, int len);
  • 缓冲流

    • 作用:包装原始字节流和字符流,提升原始流的读写数据的性能。

    • 字节输入缓冲流:BufferedInputStrea

      InputStream bis = new BufferedInputStream(FileInputStream is,int size);
    • 字节输出缓冲流: BufferedOutputStream

      OutputStream bos = new BufferedOutputStream(FileOutputStream os,int size);
    • 字符输入缓冲流: BufferedReader(新增读取某一行的数据)

    • 字符输出缓冲流: BufferedWriterzz(新增添加一行数据的方法)

  • 转换流

    • 引起问题:如果程序的编码方式和文本文件的编码方式不一致,就会出现乱码问题。解决该问题有以下两种方式:

    • 字符输入转换流:InputStreamReader:

      • 解决思路:先获取文件的原始字节流,然后按照指定的编码转为字符输入流。

        //构造函数
        public InputStreamReader(InputStream is,String charset);
    • 字符输出转换流: OutputStreamWriter:

      • 作用:可以控制写入文件的字符使用什么字符编码。

      • 解决:先获取字节输出流,再按照指定的编码转为字符输出流。

        //构造函数
        public OutputStreamWriter(OutputStream is,String charset);
  • 打印流

    • 作用:更方便更高效的打印数据出去,打印什么就输出什么

    • 字节输出打印流:PrintStream

      //构造方法
      //打印流直接通向字节输出流、文件、文件路径
      public PrintStream(OutputStream/File/String);
      //可以指定写出去的字符编码
      public PrintStream(String fileName,Charset charset);
      //可以指定实现自动刷新
      public PrintStream(OutputStream out,boolean autoFlush);
      //指定自动刷新,并指定字符编码
      public PrintStream(OutputStream out,boolean autoFlush,String encoding);//打印方法
      //打印任意类型的数据
      public void printIn(Xxx xx);
    • 字符输出打印流: PrintWriter

      //构造方法
      //打印流直接通向字节输出流、文件、文件路径
      public PrintWriter(OutputStream/Writer/File/String);
      //可以指定写出去的字符编码
      public PrintWriter(String fileName,Charset charset);
      //可以指定实现自动刷新
      public PrintWriter(OutputStream out/Writer,boolean autoFlush);
      //指定自动刷新,并指定字符编码
      public PrintWriter(OutputStream out,boolean autoFlush,String encoding);//打印方法
      //打印任意类型的数据
      public void printIn(Xxx xx);
  • 数据流

    • 数据输入流:DataInputStream(读取数据输出流写出去的数据)

    • 数据输出流:DataOutputStream(允许把数据及其类型一并写出去)

  • 序列化流(字节流下的)

    • 对象反序列化:ObjectInputStream(读取文件中的对象)

      //构造器
      //创建对象字节输入流,包装基础的字节流
      public ObjectInputStream(InputStream is);//读取存储在文件中的对象的方法
      public final Object readObject();
    • 对象序列化: ObjectOutputStream(把java对象序列化存储到文件中去)

      //构造器
      //创建字节输出流,包装基础的字节输出流
      public ObjectOutputStream(OutputStream os);//把对象写入文件的方法
      public final void writeObject(Object o);

相关文章:

最全面IO流介绍

1.字符集介绍 标准ASCII字符集:使用1个字节存储一个字符,首尾是0,总可以表示128个字符。是美国信息交换标准代码,包含英文、符号等等。 GBK汉字编码字符集,包含2万多个汉字等字符,GBK中一个中文字符编码成…...

fastadmin 文件上传腾讯云

1-安装腾讯云SDK composer require qcloud/cos-sdk-v5 2-腾讯云配置 <?phpnamespace app\common\controller;use Qcloud\Cos\Client; use think\Controller; use think\Db;class Tencent extends Controller {/*** 上传文件* param $config* param $key* return array*/p…...

《机器学习》—— PCA降维

文章目录 一、PCA降维简单介绍二、python中实现PCA降维函数的介绍三、代码实现四、PCA降维的优缺点 一、PCA降维简单介绍 PCA&#xff08;主成分分析&#xff0c;Principal Component Analysis&#xff09;是一种常用的数据降维技术。它通过线性变换将原始数据转换到新的坐标系…...

植物三萜皂苷生物合成途径及调控机制研究进展-文献精读48

摘要 三萜皂苷(triterpenoids saponins)是由三萜皂苷元和一个或多个糖基和/或其他化学基团缩合而成的一系列结构多样的天然化合物[1], 主要分布在五加科、蝶形花科、石竹科、桔梗科、毛茛科、玄参科、葫芦科等植物中[2]. 植物中三萜皂苷常分布在特定的器官和组织, 如人参(Pana…...

server 2016搭建FTP服务

目录 一、实验环境 二、在server 2016上面安装FTP服务 三、在server 2016上面配置FTP服务 四、创建用户&#xff08;也可创建用户组&#xff0c;给用户组赋予权限&#xff09; 一、实验环境 windows server 2016用于安装ftp服务 windows 10作为客户端进行测试。 二、在s…...

物理学基础精解【4】

文章目录 运动和力质点运动机械运动的参考系运动的相对性运动学中坐标系 参考文献 运动和力 质点运动 一个物体相对于另一个物体的位置或一个物体的某些部分相对于其他部分的位置 &#xff0c;随着时间而变化的过程&#xff0c;叫机械运动 。质点是一个物理学中的理想化模型&…...

【区块链 + 人才服务】Blockchain Workshop- 区块链编程实践平台 | FISCO BCOS应用案例

Blockchain Workshop v2.0&#xff08;以下简称 BCW v2.0&#xff09;是点宽网络科技有限公司升级的全新区块链实践教育平台产品。 BCW v2.0 区块链实践教育平台面向高校区块链专业人才培养&#xff0c;用于区块链专业技术学习和智能合约编程学习&#xff0c;平台基于 FISCO BC…...

Java面试篇基础部分-Java中常用的I/O模型

阻塞I/O模型 阻塞式的I/O模型是一种非常常见的I/O模型机制,在进行数据读写操作的时候,客户端会发生阻塞等待。 工作流程如图所示,该用户线程一直阻塞,等待内存中的数据就绪;内存中的数据就绪之后,内核态的数据将拷贝到用户线程中,并且返回I/O的执行结果到用户线程。这个…...

如何使用python运行Flask开发框架并实现无公网IP远程访问

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程语…...

第三届828 B2B企业节开幕,大腾智能携手华为云共谱数字化新篇章

8月27日&#xff0c;由华为携手上万家伙伴共同发起的第三届828 B2B企业节在贵州正式开幕。 本届企业节推出上万款数智产品&#xff0c;600多个精选解决方案&#xff0c;旨在融通数智供需&#xff0c;加速企业智改数转&#xff0c;助推中国数智产业实力再升级。中共贵州省委副书…...

Linux网络编程IO管理

网络 IO 涉及到两个系统对象&#xff0c;一个是用户空间调用 IO 的进程或者线程&#xff0c;一个是内核空间的内核系统&#xff0c;比如发生 IO 操作 read 时&#xff0c;它会经历两个阶段&#xff1a; 等待内核协议栈的数据准备就绪&#xff1b;将内核中的数据拷贝到用户态的…...

SpringCloud集成ELK

1、添加依赖 <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.1</version> </dependency>2、在logback-spring.xml中添加配置信息&#xff08;logback-sp…...

【卷起来】VUE3.0教程-06-组件详解

各位看官&#xff0c;点波关注和赞吧 组件允许我们将 UI 划分为独立的、可重用的部分&#xff0c;并且可以对每个部分进行单独的思考。在实际应用中&#xff0c;组件常常被组织成层层嵌套的树状结构&#xff1a; 这和我们嵌套 HTML 元素的方式类似&#xff0c;Vue 实现了自己的…...

JS Web

Web API 元素通用属性 元素自身属性 事件处理...

【Linux】传输层协议——UDP

零、传输层的作用是负责数据能够从发送端传输到接收端 一、再来认识一下端口号 端口号&#xff08;Port&#xff09;标识了一个主机进行通信的不同的应用程序。在TCP/IP协议中&#xff0c;用“源IP”&#xff0c;“源端口号”&#xff0c;“目的IP”&#xff0c;“目的端口号”…...

算法学习攻略总结 : 入门至进阶,通关之路指南

❃博主首页 &#xff1a; <码到三十五> ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a; <搬的每块砖&#xff0c;皆为峰峦之基&#xff1b;公众号搜索(码到…...

《卷积神经网络 CNN 原理探秘》

CNN基本原理详解 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称CNN&#xff09;&#xff0c;是一种前馈神经网络&#xff0c;人工神经元可以响应周围单元&#xff0c;可以进行大型图像处理。卷积神经网络包括卷积层和池化层。 卷积神经网络是受…...

C#获取计算机信息

目录 效果 项目 代码 下载 效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Management; n…...

派遣函数 - 通过设备链接打开设备

利用文件IO相关的Wn32API对设备进行“打开”和“关闭”操作。要打开设备&#xff0c;必须通过设备的名字才能得到该设备的柄。前面介绍过&#xff0c;每个设备都有设备名称&#xff0c;如HelloDDK驱动程序的设备名为“Device\\MyDDKDevice”&#xff0c;但是设备名无法被用户模…...

Vue 2 中的 `$set` 方法详解

在 Vue 2 中&#xff0c;响应式数据的更新非常重要&#xff0c;因为它确保了当数据改变时&#xff0c;视图能够自动更新。Vue 使用一套高效的机制来追踪依赖并在数据变化时更新视图。然而&#xff0c;在某些情况下&#xff0c;直接修改对象的属性可能不会触发视图更新。这时&am…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...