当前位置: 首页 > 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…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...