最全面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…...
告别全屏地球!用Cesium.js在地图上只显示一个县(附完整代码)
用Cesium.js实现区域聚焦:打造专属行政区划三维地图 在WebGIS开发中,我们经常遇到需要将三维地球的显示范围限定在特定行政区划内的需求。无论是为了突出展示某个城市的发展规划,还是为了制作县域级别的专题地图,区域聚焦技术都能…...
Dify工作流终极指南:50+模板一键导入,零基础也能快速上手AI自动化
Dify工作流终极指南:50模板一键导入,零基础也能快速上手AI自动化 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程,自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Tren…...
Go语言命令行交互库promptui实战:打造专业CLI工具
1. 项目概述:一个让命令行交互“活”起来的工具如果你经常和命令行打交道,无论是管理服务器、运行自动化脚本,还是开发调试,肯定遇到过需要用户输入参数的情况。传统的做法是使用read命令,或者在脚本里写死参数&#x…...
西安小程序制作优质服务推荐
在西安,小程序制作已成为众多企业实现数字化转型的核心一步。企业在这个领域的选择尤为重要,因为市场上的服务供应商数量庞大、难以判断其服务质量。因此专业背景、以往案例以及客户评价,这些都能够反映出公司的整体实力。还有,成…...
中小团队如何通过Taotoken统一管理多个AI项目的API成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 中小团队如何通过Taotoken统一管理多个AI项目的API成本 应用场景类,面向同时进行多个AI应用探索或开发的中小团队技术管…...
Kubernetes原生部署Jenkins:全栈方案与生产级实践指南
1. 项目概述:一个为Kubernetes而生的Jenkins全栈部署方案在容器化和云原生技术席卷全球的今天,Jenkins作为持续集成与持续交付领域的常青树,其部署形态也正经历着深刻的变革。直接将Jenkins部署在物理机或虚拟机上,虽然简单直接&a…...
避坑指南:Halcon在C# WinForm中图像处理的内存管理与窗口显示问题
Halcon与C#联合开发中的内存管理与窗口显示避坑指南 引言 在工业视觉应用开发中,Halcon与C#的联合开发模式因其高效性和灵活性而广受欢迎。然而,许多开发者在实际项目中常会遇到一些棘手的"坑",尤其是内存管理和窗口显示方面的问题…...
4.4 Spark SQL数据源 - JSON
Spark SQL JSON数据源实战涵盖:自动Schema推断读取JSON文件、spark.read.json()方法应用、文件格式规范(每行独立JSON)、HDFS文件操作及Spark Shell交互式查询。核心实践包括:从HDFS读取用户与成绩JSON文件创建DataFrame并关联分析…...
BilibiliDown:如何轻松实现B站视频批量下载与音频提取的终极指南
BilibiliDown:如何轻松实现B站视频批量下载与音频提取的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh…...
独立开发者如何利用Taotoken管理多个项目的AI密钥与用量
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用Taotoken管理多个项目的AI密钥与用量 作为独立开发者,你可能同时维护着多个项目,例如一…...
