最全面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(主成分分析,Principal Component Analysis)是一种常用的数据降维技术。它通过线性变换将原始数据转换到新的坐标系…...
植物三萜皂苷生物合成途径及调控机制研究进展-文献精读48
摘要 三萜皂苷(triterpenoids saponins)是由三萜皂苷元和一个或多个糖基和/或其他化学基团缩合而成的一系列结构多样的天然化合物[1], 主要分布在五加科、蝶形花科、石竹科、桔梗科、毛茛科、玄参科、葫芦科等植物中[2]. 植物中三萜皂苷常分布在特定的器官和组织, 如人参(Pana…...
server 2016搭建FTP服务
目录 一、实验环境 二、在server 2016上面安装FTP服务 三、在server 2016上面配置FTP服务 四、创建用户(也可创建用户组,给用户组赋予权限) 一、实验环境 windows server 2016用于安装ftp服务 windows 10作为客户端进行测试。 二、在s…...
物理学基础精解【4】
文章目录 运动和力质点运动机械运动的参考系运动的相对性运动学中坐标系 参考文献 运动和力 质点运动 一个物体相对于另一个物体的位置或一个物体的某些部分相对于其他部分的位置 ,随着时间而变化的过程,叫机械运动 。质点是一个物理学中的理想化模型&…...
【区块链 + 人才服务】Blockchain Workshop- 区块链编程实践平台 | FISCO BCOS应用案例
Blockchain Workshop v2.0(以下简称 BCW v2.0)是点宽网络科技有限公司升级的全新区块链实践教育平台产品。 BCW v2.0 区块链实践教育平台面向高校区块链专业人才培养,用于区块链专业技术学习和智能合约编程学习,平台基于 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,以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架,采用Python编程语…...
第三届828 B2B企业节开幕,大腾智能携手华为云共谱数字化新篇章
8月27日,由华为携手上万家伙伴共同发起的第三届828 B2B企业节在贵州正式开幕。 本届企业节推出上万款数智产品,600多个精选解决方案,旨在融通数智供需,加速企业智改数转,助推中国数智产业实力再升级。中共贵州省委副书…...
Linux网络编程IO管理
网络 IO 涉及到两个系统对象,一个是用户空间调用 IO 的进程或者线程,一个是内核空间的内核系统,比如发生 IO 操作 read 时,它会经历两个阶段: 等待内核协议栈的数据准备就绪;将内核中的数据拷贝到用户态的…...
SpringCloud集成ELK
1、添加依赖 <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.1</version> </dependency>2、在logback-spring.xml中添加配置信息(logback-sp…...
【卷起来】VUE3.0教程-06-组件详解
各位看官,点波关注和赞吧 组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应用中,组件常常被组织成层层嵌套的树状结构: 这和我们嵌套 HTML 元素的方式类似,Vue 实现了自己的…...
JS Web
Web API 元素通用属性 元素自身属性 事件处理...
【Linux】传输层协议——UDP
零、传输层的作用是负责数据能够从发送端传输到接收端 一、再来认识一下端口号 端口号(Port)标识了一个主机进行通信的不同的应用程序。在TCP/IP协议中,用“源IP”,“源端口号”,“目的IP”,“目的端口号”…...
算法学习攻略总结 : 入门至进阶,通关之路指南
❃博主首页 : <码到三十五> ☠博主专栏 : <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 : <搬的每块砖,皆为峰峦之基;公众号搜索(码到…...
《卷积神经网络 CNN 原理探秘》
CNN基本原理详解 卷积神经网络(Convolutional Neural Network,简称CNN),是一种前馈神经网络,人工神经元可以响应周围单元,可以进行大型图像处理。卷积神经网络包括卷积层和池化层。 卷积神经网络是受…...
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对设备进行“打开”和“关闭”操作。要打开设备,必须通过设备的名字才能得到该设备的柄。前面介绍过,每个设备都有设备名称,如HelloDDK驱动程序的设备名为“Device\\MyDDKDevice”,但是设备名无法被用户模…...
Vue 2 中的 `$set` 方法详解
在 Vue 2 中,响应式数据的更新非常重要,因为它确保了当数据改变时,视图能够自动更新。Vue 使用一套高效的机制来追踪依赖并在数据变化时更新视图。然而,在某些情况下,直接修改对象的属性可能不会触发视图更新。这时&am…...
避坑指南:Double DQN和Dueling DQN在TensorFlow 2.x中的5个常见实现错误
Double DQN与Dueling DQN在TensorFlow 2.x中的五大工程陷阱与解决方案 当你在深夜调试强化学习模型时,是否遇到过这种情况:训练曲线像过山车一样剧烈波动,明明采用了Double DQN或Dueling DQN这些改进算法,效果却比基础DQN还要差&a…...
保姆级教程:手把手教你安装并激活DevExpress 20.1.3(附资源与注册机使用避坑指南)
深度指南:DevExpress 20.1.3开发环境高效配置与资源管理 在.NET生态系统中,DevExpress始终以其强大的控件库和高效的开发工具占据重要地位。对于刚接触这个工具集的开发者来说,如何快速搭建一个稳定的开发环境往往成为项目启动的第一道门槛。…...
G-Helper:华硕笔记本电池健康管理的终极轻量化解决方案
G-Helper:华硕笔记本电池健康管理的终极轻量化解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地…...
从‘丐版’到‘神板’:深度拆解Raspberry Pi Zero 2 W的散热设计与性能压榨指南
从‘丐版’到‘神板’:深度拆解Raspberry Pi Zero 2 W的散热设计与性能压榨指南 当一款信用卡大小的开发板搭载四核处理器时,散热与性能的平衡便成为硬件极客们最热衷的挑战。Raspberry Pi Zero 2 W以不到15美元的定价,却藏着令人惊喜的工程智…...
ssm+java2026年毕设司库管理系统【源码+论文】
本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于企业理财与融资管理问题的研究,现有研究主要以大型企业ERP系统或通用财务管理软件为主,专门针对中…...
小型电动助力播种机【设计说明书+CAD图纸+solidworks三维+STEP+IGS】
小型电动助力播种机是针对传统播种作业效率低、劳动强度大的问题设计的农业机械装置,其核心作用在于通过电动助力系统优化播种流程,实现均匀播种与精准控制。该装置采用模块化设计理念,将动力传输、播种控制与行走机构集成于一体,…...
从‘它怎么又挂了’到‘服务稳如狗’:我是如何用Prometheus+Grafana给自家小项目做监控的
从零搭建轻量级服务监控:PrometheusGrafana实战指南 凌晨三点,手机突然响起刺耳的警报声——这已经是本周第三次被线上服务宕机惊醒。作为独立开发者或小团队,我们往往身兼数职,既要写代码又要维护基础设施。服务崩溃时才发现问题…...
设计师必看:Photoshop混合模式实战指南,5分钟搞定光影合成与氛围感调色
Photoshop混合模式实战指南:5分钟掌握光影合成与氛围调色 当你在深夜赶稿时,突然发现人物照片缺乏立体感,或是产品静物图需要增强戏剧性光影——这就是混合模式大显身手的时刻。不同于繁琐的曲线调整和复杂的蒙版操作,混合模式就像…...
咱就说中小厂房、仓库的火灾报警系统,用S7-200 PLC加组态王真的是性价比天花板——够稳定、好上手,成本还低,完全满足日常需求
基于S7-200 PLC和组态王火灾报警控制系统 我们主要的后发送的产品有,带解释的梯形图接线图原理图图纸,io分配,组态画面咱先从最基础的IO分配说起,直接给大家上我常用的分配表(都是经过3个项目验证的,靠谱…...
告别低效收藏:MarkDownload让网页内容保存效率提升300%
告别低效收藏:MarkDownload让网页内容保存效率提升300% 【免费下载链接】markdownload A Firefox and Google Chrome extension to clip websites and download them into a readable markdown file. 项目地址: https://gitcode.com/gh_mirrors/ma/markdownload …...
