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,一经查实,立即删除!

相关文章

u-boot引导加载程序的命令列表

2024年5月4日,周六下午 这是u-boot引导加载程序的命令列表,提供了各种功能来配置系统、加载内核和文件系统、进行网络引导等操作。下面是每个命令的简要说明: ?: 显示命令帮助信息的别名。base: 打印或设置地址偏移量。bdinfo: 打印板信息结…

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

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

c#学习基础2

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

C# Windows Forms 应用程序中连接到 数据库

要在 C# Windows Forms 应用程序中连接到 SQL Server,你需要使用 .NET Framework 的 System.Data.SqlClient 命名空间,这个命名空间提供了连接和操作 SQL Server 的工具。以下是一个简单的示例,展示如何建立连接并执行 SQL 查询。 步骤 1: 添…

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

(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中一个非常重要的部分:多表查询: 多表关系 多表关…

如何解决WordPress邮件发送和接收问题

在使用WordPress网站时,用户有时可能会遇到邮件接收或发送失败的问题。这种问题不仅影响网站的正常运营,还可能影响用户体验。以下是一篇详细的解决方案文章,帮助您系统地诊断和解决WordPress不发送或收不到邮件的问题。 引言 WordPress作为…

从零开始学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 的界面中有一个导出功能。 单击这个导出,…

深入探索Element-UI:构建高效Web前端的利器

深入探索Element-UI:构建高效Web前端的利器 引言:前端框架的选择与Element-UI的定位一、Element-UI初探二、快速上手:安装与配置三、核心组件深度解析四、实用功能与进阶技巧五、性能优化与最佳实践六、实战案例分析七、与其他技术栈的集成 安…

OpenWRT有线桥接部署教程

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

蚂蚁笔记(非官方版)复活

蚂蚁笔记,官方已经停止维护了。但我觉得挺好用的,就重新拉分支,并进行了开发和维护。 开源仓库地址:GitHub - wiselike/leanote-of-unofficial: Leanote of non-official nolicensed version 同时,公开了docker一键部…

《LeetCode力扣练习》代码随想录——贪心算法(K次取反后最大化的数组和---Java)

《LeetCode力扣练习》代码随想录——贪心算法(K次取反后最大化的数组和—Java) 刷题思路来源于 代码随想录 1005. K 次取反后最大化的数组和 贪心 class Solution {public int largestSumAfterKNegations(int[] nums, int k) {nums Arrays.stream(nums)…

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

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