io流,字节流概述

io流概述

io流:输入输出流读写数据的
i 指Input,称为输入流:负责把数据读到内存中去
o指Output,称为输出流:负责写数据出去

io流的分类

按流的方向分为: 

输入流和输出流。

按流中数据的最小单位,

分为:字节流(适合操作所有类型的文件,eg:比如:音频、视频、图片文本文件的复制,转移等。)和字符流(只适合操作纯文本文件,eg:读写txt、java文件等)

总结流的四大类: 


字节输入流:以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流
字节输出流:以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流。
字符输入流:以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流。
字符输出流:以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流。

IO流的体系

JAVA.io包下

FileInputStream:文件字节输入流

作用:以内存为基准,可以把文件磁盘中的内容以字节的形式读入到内存中去

构造器说明
public FileInputStream(File file) 创建字节输入流管道与源文件接通
public FileInputStream(String pathname)创建字节输入流管道与源文件接通
方法名称说明
public int read() 每次读取一个字节返回,如果发现没有数据可读会返回-1. 
public int read(byte[ ]buffer) 

每次用一个字节数组去读取数据,返回字节数组读取了多少个字节,
如果发现没有数据可读会

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;public class InputStream1 {//掌握文件字节输入流,每次读取一个字节public static void main(String[] args) throws Exception {//创建文件字节输入流管道//InputStream is=new FileInputStream(new File("D:\\code\\weilai1\\src\\itheima.txt"));InputStream is=new FileInputStream("D:\\code\\weilai1\\src\\itheima.txt");//开始读取文件的字节数据//public int read() 	每次读取一个字节返回,如果发现没有数据可读会返回-1.int b1=is.read();System.out.println(b1);int b2=is.read();System.out.println(b2);//使用循环改造上方代码int b;while ((b=is.read())!=-1){System.out.print((char) b);}//读取数据的性能非常差,读取汉字输出会乱码!不可避免//流使用完毕之后,必须关闭,否则会浪费系统资源is.close();}
}
使用FileInputStream每次读取多个字节
import java.io.*;public class InputStream2 {//目标:掌握使用FileInputStream每次读取多个字节public static void main(String[] args) throws IOException {//1、创建一个字节输入流对象代表字节输入流管道与源文件接通InputStream is=new  FileInputStream("D:\\code\\weilai1\\src\\itheima.txt");//2、开始读取文件中的字节数据,每次读取多个字节/*byte[]buffer=new byte[3];int len =is.read(buffer);String rs= new String (buffer);System.out.println(len);System.out.println(rs);int len1 =is.read(buffer);String rs1= new String (buffer,0,len1);System.out.println(len1);System.out.println(rs1);int len2 =is.read(buffer);System.out.println(len2);//-1*/byte[]bytes=new byte[3];int len;//记住每次读了多少个字节while((len=is.read(bytes))!=-1){//注意:读取多少,就倒出来多少String rs1= new String (bytes,0,len);System.out.print(rs1);}//性能得到了明显的提升,但是这种方案也不能避免读取汉字乱码的问题is.close();}
}

使用字节流输入中文,如何保证不乱码?

定义 一个与文件大小一样大的字节数组,一次性读完文件的所有字节

import java.io.*;public class InputStream3 {//目标:使用文件字节输入流一次读取文件的全部字符public static void main(String[] args) throws IOException {//1、一次性读取完文件的全部字节到一个字节数组中去//创建一个字节输入流对象代表字节输入流管道与源文件接通InputStream is=new FileInputStream("D:\\code\\weilai1\\src\\itheima.txt");//准备一个字节数组,大小与文件的大小正好一样大File file=new File("D:\\code\\weilai1\\src\\itheima.txt");long size=file.length();byte[]bytes=new byte[(int)size];int len=is.read(bytes);System.out.println(new String(bytes));System.out.println(size);System.out.println(len);}
}

文件字节输入流:一次读取完全部字节
·方式一:自己定义一个字节数组与被读取的文件大小一样大,然后使用该字节数组,一次读完文件的全部字节。

方法名称说明
public int read(byte[ ]buffer)每次用一个字节数组去读取,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1. 

 
方式二:Java官方为InputStream提供了如下方法,可以直接把文件的全部字节读取到一个字节数组中返回。

方法名称说明
public byte[]readAllBytes() throws IOException直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返回
import java.io.*;public class InputStream3 {//目标:使用文件字节输入流一次读取文件的全部字符public static void main(String[] args) throws IOException {//1、一次性读取完文件的全部字节到一个字节数组中去//创建一个字节输入流对象代表字节输入流管道与源文件接通InputStream is=new FileInputStream("D:\\code\\weilai1\\src\\itheima.txt");//准备一个字节数组,大小与文件的大小正好一样大File file=new File("D:\\code\\weilai1\\src\\itheima.txt");long size=file.length();byte[]bytes=new byte[(int)size];int len=is.read(bytes);System.out.println(new String(bytes));System.out.println(size);System.out.println(len);/*byte[]bytes=is.readAllBytes();System.out.println(new String(bytes));*/}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

展开说说:Android Fragment完全解析-卷三

本文章分析了Fragment的管理器FragmentManager、事务FragmentTransaction 、以及完整的声明周期和动态加载Fragment的原理解析。 1、Fragment管理器 FragmentManager 类负责在应用的 fragment 上执行一些操作,如添加、移除或替换操作,以及将操作添加到…

c#学习基础2

四、复杂数据类型--结构体 1.基本概念 、2.基本语法 结构体一般写在namespace语句块中; 结构体关键字 struct 3.实例 4.结构体的使用 5.访问修饰符 6.结构体的构造函数 7.总结 五、排序初探 1)冒泡排序 1.排序的基本概念 2.冒泡排序的基本原理 两…

西班牙语语法名词的复数形式,柯桥西班牙语培训

(2)后面加-es • 以辅音结尾的名词。例如: el seor - los seores 先生 la ciudad - las ciudades 城市 • 以-y 结尾的名词。例如: el rey - los reyes 国王 la ley - las leyes 法律 • 以-z 结尾的名词,将词尾…

【Linux】学习笔记

文章目录 [toc]第一章:基础篇01|课程介绍02|内容综述03|什么是Linux04|Linux的内核版本及常见发行版内核版本发行版本Red Hat Enterprise LinuxFedoraCentOSDebianUbuntu 05|安装VirtualBox虚拟机VirtualBox下载url 06|在虚拟机中安装Linux系统Linux安装镜像下载 07…

数据库(MySQL)—— 多表查询

数据库(MySQL)—— 多表查询 多表关系一对多多对多一对一多表查询概述数据准备查询形式笛卡尔积 分类连接查询内连接外连接左外连接右外连接 自连接联合查询 今天我们来进入MySQL中一个非常重要的部分:多表查询: 多表关系 多表关…

从零开始学AI绘画,万字Stable Diffusion终极教程(四)

【第4期】图生图 欢迎来到SD的终极教程,这是我们的第四节课 这套课程分为六节课,会系统性的介绍sd的全部功能,让你打下坚实牢靠的基础 1.SD入门 2.关键词 3.Lora模型 4.图生图 5.controlnet 6.知识补充 在前面的课程中,我…

主机win10,VMware 装了ubuntu,ubuntu传文件到主机

亲测可用,1分钟搞定,不能用你打死我 使用 FileZilla 工具互传 FileZilla是一款免费的工具,是基于 FTP 协议进行文件互传的,在传输过程中我们的ubuntu是作为服务器, FileZilla 工具则是作为客户端。 1 ubuntu安装 FTP…

【力扣】203、环形链表 II

142. 环形链表 II 要解决这道题,首先需要对问题进行拆解: 确定链表是否存在环确定环的入口点 如何判断是否存在环呢?这个比较容易想到,使用快慢指针即可判断链表是否存在环。我们定义两个指针: ListNode slow head…

容器组_配置初始化容器

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📘相关专栏Rust初阶教程、go语言基础系列、spring教程等,大家有兴趣的可以看一看 📙Jav…

SSM整合-前后端分离-项目环境搭建 (上)

整合SSM 项目基础环境搭建项目介绍创建项目项目全局配置web.xmlSpringMVC配置配置Spring和MyBatis, 并完成整合创建表, 使用逆向工程生成Bean, XxxMapper和XxxMapper.xml注意事项和细节说明 实现功能01-搭建Vue前端工程需求分析/图解代码实现搭建Vue前端工程vue3项目目录结构梳…

服务网关GateWay原理

文章目录 自动装配核心类GatewayAutoConfigurationDispatcherHandler请求处理阶段apply方法httpHandler#handle方法WebHandler#handle方法DispatchHanlder#handle方法第一步 getHandler获取请求映射第二步 invokeHandler 请求适配第三步 handleResult请求处理总结 上一篇博文我…

Gitea 上传用户签名

在 Gitea 的用户管理部分,有一个 SSH 和 GPG 的选项。 单击这个选项,可以在选项上添加 Key。 Key 的来源 如是 Windows 的用户,可以选择 Kleopatra 这个软件。 通过这个软件生成的 Key 的界面中有一个导出功能。 单击这个导出,…

OpenWRT有线桥接部署教程

前言 之前咱们讲到OpenWRT部署WAN实现PPPoE拨号上网和自动获取IP模式上网的办法: OpenWRT设置PPPoE拨号教程 OpenWRT设置自动获取IP,作为二级路由器 这一次,咱们尝试用OpenWRT有线桥接上一级路由器的教程。 可能有小伙伴敏锐地发现了&am…

【JVM】GC调优(优化JVM参数)、性能调优

GC调优 GC调优的主要目标是避免由垃圾回收引起程序性能下降。 GC调优的核心指标 垃圾回收吞吐量:执行用户代码时间/(执行用户代码时间 GC时间)延迟:GC延迟 业务执行时间内存使用量 GC调优步骤 发现问题:通过监控…

论文研读|针对文生图模型的AIGC检测

前言:人工智能生成内容的鉴别(AIGC检测)算是当前的研究热点之一,本篇文章介绍几篇针对文生图模型的 AIGC 检测相关工作。 相关文章:AIGC溯源相关研究详见此篇文章 目录 1. Towards Universal Fake Image Detectors tha…

OneNote导出白色背景文件时将笔记墨迹转换颜色

今天用OneNote导出笔记时发现在文件上做的黑色墨迹笔记全部转成了白色。推测是因为onenote会根据背景色自动转换黑色和白色的墨迹,但是其他颜色好像导出的时候不会转换。 于是,我们首先要转换背景,将黑色背景转成白色背景, 然后将…

GNU Radio创建FFT、IFFT C++ OOT块

文章目录 前言一、GNU Radio官方FFT弊端二、创建自定义的 C OOT 块1、创建 OOT 模块2、创建 OOT 块3、修改 C 和 CMAKE 文件4、编译及安装 OOT 块 三、测试1、grc 图2、运行结果①、时域波形对比②、频谱图对比 四、资源自取 前言 GNU Radio 自带的 FFT 模块使用起来不是很方便…

OCC笔记:选择TopoDS_Shape顶点、边、面等等

1、通过AIS_InteractiveContext的函数访问当前选择的图形 hAISContext->InitSelected(); hAISContext->MoreSelected(); hAISContext->NextSelected(); hAISContext->SelectedShape(); 其中hAISContext->SelectedShape()通过StdSelect_…

项目管理【环境】过程

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 【环境】过程 一、规划和管理项目的合规性 1.1 规划和管理项目的合规性 1.2 确认合规要求 1.3 审计:衡量合规的程度 二、项目管理计划和项目文件 2.1 项目管理计划和…

C语言 联合和枚举

目录 1. 联合体1.1 联合体类型的声明1.2 联合体变量的创建1.3 联合体的特点1.4 联合体在内存中的存储1.5 联合体使用举例 2. 枚举类型2.1 枚举类型的声明2.2 枚举变量的创建和初始化2.3 枚举类型的大小2.4 枚举类型的优点 正文开始 上次我们通过《C语言 结构体详解》学习了结构…