4.11学习总结

一.IO流

一.java中IO的初步了解

(一).概念:

Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。

(二).java IO流的框架图

(三).流的分类:

1.按方向分:

  • 输入流:用来读 in
  • 输出流:用来写 out

2.按一次读取的字节数分:

  • InputStream outputStream
  • Reader Writer
  • 字节流一次读取1个字节 byte 字符流一次读取多个字符
  • 字节流:数据流中最小的数据单元是字节
  • 字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节(无论中文还是英文都是两个字节)。

3.按功能分:

  • 节点流:可以从或向一个特定的地方(节点)读写数据,直接连接数据源。如最常见的是文件的FileReader,还可以是数组、管道、字符串,关键字分别为ByteArray/CharArray,Piped,String。.
  • 处理流(包装流):并不直接连接数据源,是对一个已存在的流的连接和封装,是一种典型的装饰器设计模式,使用处理流主要是为了更方便的执行输入输出工作,如PrintStream,输出功能很强大,又如BufferedReader提供缓存机制,推荐输出时都使用处理流包装。

 二.常用的IO流类(部分)

1.InputStream和Reader

InputStream 是字节流输入对象抽象类,它实现了从字节输入流中读取数据的方法。开发人员可以使用子类实现该接口,从而通过该对象获取到 InputStream 中的数据。在输入过程中,系统会将字节编码为字符。此外,InputStream 也提供了诸如关闭流、清空数据缓存等常规操作。

Reader 是用于读取字符流的抽象类,它的子类实现了具体的字符输入流。默认情况下,Reader 所使用的字符编码与平台默认的字符编码相同。因此,在不指定编码的情况下,Reader 将使用操作系统的默认字符编码来读取字符流。

 

实例:

public class io {public static void main(String[] args) throws IOException {FileInputStream file =new FileInputStream("study1\\text1");byte[]arr=new byte[1024];int len;while((len=file.read())!=-1){String str= new String(arr,0,len);System.out.println(str);}}
}
public class IO5 {public static void main(String[] args) throws IOException {//1.创建对象FileReader fr=new FileReader("Study1\\text1");//2.读取数据//read()底层上也是字节流,但是他是字节流+字节集,遇到汉字就读取多个字节int r;/*while((r=fr.read())!=-1){System.out.print(r);//解码后以十进制形式保cun}*/while((r=fr.read())!=-1){System.out.print((char)r);//解码后以十进制形式保cun}//3.释放资源fr.close();}
}

2.OutputStream和Writer

OutputStream 是用于写入字节流的抽象类,它的子类实现了具体的字节输出流。

Writer是用于写入字符流的抽象类,它的子类实现了具体的字符输出流。

 

 

public class IO1 {public static void main(String[] args) throws IOException {//1.创建字节输出对象//参数是字符串表示的路径或者File对象都可以//如果文件不存在会创建一个新文件,但要保证父级路径是存在的//如果文件已经存在,则会清空文件FileOutputStream fos=new FileOutputStream("Study1\\text1");//2.写出数据//write方法的参数是整数,但是实际上写到本地文件中是以ASCLL对于的字符输出fos.write(97);byte[]arr={97,98,99,100};fos.write(arr);//释放资源//每次使用完六后都要释放资源fos.close();}
}
public class WriteFileExample {public static void main(String[] args) {String content = "这是要写入文件的内容";try (Writer writer = new FileWriter("example.txt")) {writer.write(content);} catch (IOException e) {e.printStackTrace();}}

3.BufferReader和BufferWriter

BufferedReader 继承自 Reader 类,它的作用是从输入流中读取文本数据,并缓冲各个字符,以提供字符、数组和行的高效读取。

BufferedWriter 继承自 Writer 类,它的作用是向输出流中写入字符数据,并缓冲各个字符,以提高写入性能。

这两个类的主要优势在于减少了对底层数据源(例如文件、网络连接等)的直接读写次数,而是将数据先暂存在内存缓冲区中,减少了 I/O 操作的频率,从而提高了读写性能。因此,在需要频繁读写大量数据时,使用 BufferedReader 和 BufferedWriter 可以提高程序的效率。

 

public class IO6 {public static void main(String[] args) throws IOException {/** 缓冲流:4个* 字符缓冲流和字节缓冲流** *///1.创建对象File root=new File("study1\\text1");File get=new File("study1\\text2");read(root);Write(get);}private static void Write(File get) throws IOException {BufferedWriter bw=new BufferedWriter(new FileWriter(get));String str1="好好学习";String str2="天天向上";bw.write(str1);bw.newLine();bw.write(str2);bw.newLine();bw.close();}private static void read(File root) throws IOException {BufferedReader br=new BufferedReader(new FileReader(root));String line;while((line=br.readLine())!=null){System.out.println(line);}br.close();}
}

 

4.InputStreamReader和OutputStreamWriter

InputStreamReader:把字节输入流转换为字符输入流.

OutputStreamWriter:把字节输出流转换为字符输出流

//1、创建源和目标File srcFile = new File("io"+File.separator+"a.txt");File descFile = new File("io"+File.separator+"b.txt");//2、创建字节输入输出流对象InputStream in = new FileInputStream(srcFile);OutputStream out = new FileOutputStream(descFile);//3、创建转换输入输出对象Reader rd = new InputStreamReader(in);Writer wt = new OutputStreamWriter(out);//3、读取和写入操作char[] buffer = new char[10];//创建一个容量为 10 的字符数组,存储已经读取的数据int len = -1;//表示已经读取了多少个字符,如果是 -1,表示已经读取到文件的末尾while((len=rd.read(buffer))!=-1){wt.write(buffer, 0, len);}//4、关闭流资源rd.close();wt.close();

三.操作 IO 流的模板

①、创建源或目标对象

输入:把文件中的数据流向到程序中,此时文件是 源,程序是目标

输出:把程序中的数据流向到文件中,此时文件是目标,程序是源

②、创建 IO 流对象

输入:创建输入流对象

输出:创建输出流对象

③、具体的 IO 操作

④、关闭资源

输入:输入流的 close() 方法

输出:输出流的 close() 方法

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

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

相关文章

html 实现多个文本内容,轮播效果类似gif图片

前几日&#xff0c;产品要求后端实现一个将文字转为gif图片&#xff0c;要用于官网首页广告栏。我想这不是前段就能实现吗&#xff0c;怎么还要求后端生成gif&#xff0c;然后前段在展示。你确定招的前段不是对手公司过来的卧底&#xff1f;&#xff1f;&#xff1f; <!DOCT…

asp.net core 网页接入微信扫码登录

创建微信开放平台账号&#xff0c;然后创建网页应用 获取appid和appsecret 前端使用的vue&#xff0c;安装插件vue-wxlogin 调用代码 <wxlogin :appid"appId" :scope"scope" :redirect_uri"redirect_uri"></wxlogin> <scri…

贪心算法|56.合并区间

力扣题目链接 class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> result;if (intervals.size() 0) return result; // 区间集合为空直接返回// 排序的参数使用了lambda表达…

解决vue启动项目报错:npm ERR! Missing script: “serve“【详细清晰版】

目录 问题描述问题分析和解决情况一解决方法情况二&#xff08;常见于vue3&#xff09;解决方法情况三解决方法 问题描述 在启动vue项目时通常在控制台输入npm run serve 但是此时出现如下报错&#xff1a; npm ERR! Missing script: "serve" npm ERR! npm ERR! T…

qt-C++笔记之获取当前文件名所在路径并拼接出新文件路径的一种方法

qt-C笔记之获取当前文件名所在路径并拼接出新文件路径的一种方法 code review! 运行 在 Qt 框架中&#xff0c;QFileInfo 和 QDir类通常用于文件系统信息的查询和目录管理。下面是按照这样一种新颖的步骤来拼接新文件路径的示例代码&#xff1a; #include <QFileInfo>…

微商商城源码小程序好用么?

商城APP作为电子商务行业的重要组成部分&#xff0c;已经成为了人们购物的主要方式之一。为了在竞争激烈的市场中脱颖而出&#xff0c;开发一款专业且思考深度的商城APP方案显得尤为关键。本文将从专业性和思考深度两个方面&#xff0c;探讨商城APP的开发方案。 一、专业性的重…

Qt Creator 12.0.2 debug 无法查看变量的值 Expression too Complex

鼠标放在局部变量上提示“expression too complex”。 在调试窗口也看不到局部变量的值。 这应该是qt的一个bug&#xff0c;https://bugreports.qt.io/browse/QTCREATORBUG-24180 暂时解决方法&#xff1a; 如下图&#xff0c;需要右键项目然后执行"Clean"和&quo…

Blazor OIDC 单点登录授权实例7 - Blazor hybird app 端授权

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor OIDC 单点登录授权实例2-登录信息组件wasmBlazor OIDC 单点登录授权实例3-服务端管理组件Blazor OIDC 单点登录授权实例4 …

Kyligence 发布企业级 AI 解决方案,Data + AI 落地迈向新阶段

4月11日&#xff0c;Kyligence 2024 数智论坛暨春季发布会成功召开。Kyligence 正式发布全新的企业级 AI 解决方案&#xff0c;基于服务金融、零售、制造、医药等行业领先客户的落地实践&#xff0c;Kyligence 为企业提供准确、可靠、智能的 AI 指标平台一站式解决方案&#x…

VQ-BeT: Behavior Generation with Latent Actions 代码复现(Mujoco 安装)

代码地址&#xff1a;https://github.com/jayLEE0301/vq_bet_official.git 创建环境 conda create -n vq-bet python3.9 conda activate vq-bet拉取库 git clone https://github.com/jayLEE0301/vq_bet_official.git export PROJ_ROOT$(pwd)安装pytorch conda install pyto…

win11 连接海康摄像头 ONVif协议

目录 Win 11 通过脚本打开自带的IE浏览器访问海康摄像头 海康摄像头设置支持onvif协议 安装onvif协议 onvif协议示例代码 Win 11 通过脚本打开自带的IE浏览器访问海康摄像头 第一步、桌面右键新建一个 txt 的文档 第二步、打开文档并且复制粘贴下面代码 CreateObject(&…

数仓指标体系

数仓指标体系 明确统计指标 明确统计指标具体的工作是&#xff0c;深入分析需求&#xff0c;构建指标体系。构建指标体系的主要意义就是指标定义标准化。所有指标的定义&#xff0c;都必须遵循同一套标准&#xff0c;这样能有效的避免指标定义存在歧义&#xff0c;指标定义重复…