io流的学习

目录

io流

FileOutputStream

字节输出流的细节:

FileOutputStream写数据的方式

FilelnputStream

FilelnputStream书写细节

FilelnputStream读取方式

计算机的存储规则

ASCll规则(英文)

GBK(汉字)

 Unicode字符集的UTF-8编码格式

java中的编码和解码方式

 字符流

 FileReader

read()的使用细节

FileWriter

FileWriter构造方法

 FileWriter成员方法

 FileWriter书写细节

字节缓冲流

字符缓冲流

字符缓冲流特有方法

转换流

序列化流

反序列化流


io流

用于读写文件中的数据(可以读写文件,或网络中的数据..)

io流的分类可以分为输入流和输出流

注意:字节流读取文件的时候,文件中不要有中文

1.什么是IO流?

存储和读取数据的解决方案
l: input   O: output
流:像水流一样传输数据

2.I0流的作用?

用于读写数据(本地文件,网络)

3.10流按照流向可以分类哪两种流?

输出流:程序 -->文件

输入流:文件 -->程序

4.io流按照操作文件的类型可以分类哪两种流?

字节流:可以操作所有类型的文件

字符流:只能操作纯文本文件

5.什么是纯文本文件?

用windows系统自带的记事本打开并且能读懂的文件

txt文件,md文件,xml文件,lrc文件等

FileOutputStream

操作本地文件的字节输出流,可以把程序中的数据写到本地文件中。

书写步骤:
① 创建字节输出流对象
② 写数据
③ 释放资源

FileOutputStream样例:

//1.创建对象
//号出输出流 0utputstream
//本地文件
File
File0utputStream fos = new File0utputstream("myio\\a.txt");
//2.写出数据
fos.write(97);
//3.释放资源
fos.close();

字节输出流的细节:

1.创建字节输出流对象

细节1:参数是字符串表示的路径或者是File对象都是可以的

细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的。

细节3:如果文件已经存在,则会清空文件

2.写数据

细节:write方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符

3.释放资源

每次使用完流之后都要释放资源

4.续写

如果想要续写,打开续写开关即可,开关位置:创建对象的第二个参数
默认false:表示关闭续写,此时创建对象会清空文件
手动传递true:表示打开续写,此时创建对象不会清空文件

File0utputStream fos = new File0utputstream( name: "myio\\a.txt",true);

FileOutputStream写数据的方式

FilelnputStream

操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来,

书写步骤:
创建字节输入流对象
读数据
程序
释放资源

 FileInputStream样例:

//1.创建对象
FileInputStream fis = new FileInputstream("myiolla.txt")
//2.读取数据
int bl = fis.read();
System.out.println((char)b1);
int b2 = fis.read();
System.out.println((char)b2);
int b3 = fis.read();
System.out.println((char)b3);
int b4 = fis.read();
System.out.println((char)b4);
int b5 = fis.read();
System.out.println((char)b5);
int b6 = fis.read();
System.out.println(b6);//-1
//3.释放资源
fis.close();

FilelnputStream书写细节

1.创建字节输入流对象

细节1:如果文件不存在,就直接报错。

2.读取数据

细节1: 一次读一个字节,读出来的是数据在ASCII上对应的数字
细节2:读到文件末尾了,read方法返回-1。

3.释放资源

细节1:每次使用完流必须要释放资源。

FilelnputStream读取方式

1.一次读取一个字节

 弊端:读取速度较慢

2.一次读取多个字节

注意:一次读一个字节数组的数据,每次读取会尽可能把数组装满

读入多个字节样例:

/1.创建对象
FileInputStream fis = new FileInputStream( name: "myio\la.txt")
//2.读取数据
byte[] bytes = new byte[2];
//一次读取多个字节数据,具体读多少,跟数组的长度有关
//返回值:本次读取到了多少个字节数据
int len1 =fis.read(bytes);
System.out.println(len1);//2
String str1= new string(bytes,0,len1);
System.out.println(str1);
int len2 = fis.read(bytes);
System.out.println(len2);//2
String str2 = new string(bytes, 0,len2);
System.out.println(str2);
int len3 = fis.read(bytes);
System.out.println(len3);// 1
String str3 = new string(bytes, 0,len3);
System.out.println(str3);// ed
//3.释放资源
fis.close();

计算机的存储规则

ASCll规则(英文)

编码规则:前面补0,补齐8位

解码规则:直接转成十进制

GBK(汉字)

编码规则:l不需要变动

规则1:汉字两个字节存储

规则2:高位字节二进制一定以1开头,转成十进制之后是一个负数

 Unicode字符集的UTF-8编码格式

一个英文占一个字节,二进制第一位是0,转成十进制是正数

一个中文占三个字节,二进制第一位是1,第一个字节转成十进制是负数

java中的编码和解码方式

 字符流

字符流的底层其实就是字节流

 特点

输入流:一次读一个字节,遇到中文时,一次读多个字节

输出流:底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中

使用场景

对于纯文本文件进行读写操作

 FileReader

1.创建字符输入流对象



细节1:如果文件不存在,就直接报错。

2.读取数据

细节1:按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数

细节2:读到文件末尾了,read方法返回-1。

3.释放资源

FileReader使用样例

一次读取一个

//1.创建对象并关联本地文件
FileReader fr = new FileReader("myio\\a.txt");
int ch;
while((ch =fr.read())!= -1){System.out.print((char)ch);
}
//3.释放资源
fr.close();

 一次读取多个

//1.创建对象
FileReader fr= new FileReader("myio\\a.txt");
//2.谈取数据
char[]chars = new char[2];
int len;
//read(chars):读取数据,解码,强转三步合并了,把强转之后的字符放到数组当中
//空参的read + 强转类型转换
while((len =fr.read(chars))!= -1){
//把数组中的数据变成字符串再进行打印
System,out.print(new string(chars,0,len));
//3.释放资源
fr.close();

read()的使用细节

1.read()默认也是一个字节一个字节的读取的,如果遇到中文就会一次读取多个

2.在读取之后,方法的底层还会进行解码并转成十进制,最终把这个十进制作为返回值

FileWriter

FileWriter构造方法

 FileWriter成员方法

 FileWriter书写细节

1.创建字符输出流对象

细节1:参数是字符串表示的路径或者File对象都是可以的
细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
细节3:如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关

2.写数据

细节: 如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符

释放资源

细节:每次使用完流之后都要释放资源

字节缓冲流

 字节缓冲流拷贝文件样例:

//1.创建缓冲流的对象
BufferedInputstream bis = ew BufferedInputstream(new FileInputstream("myiolla.txt")),
Bufferedoutputstream bos= new Bufferedoutputstream(new File0utputstream("myiol\copy.txt"));
//2.循环读取并写到目的地
int b;
while((b=bis.read())!=-1){
bos.write(b);
//3.释放资源
bos.close();
bis.close();

字符缓冲流

字符缓冲流特有方法

 缓冲流总结

1.缓冲流有几种?

字节缓冲输入流:BufferedInputStream

字节缓冲输出流:BufferedOutputStream

字符缓冲输入流:BufferedReader

字符缓冲输出流:BufferedWriter

2.缓冲流为什么能提高性能

缓冲流自带长度为8192的缓冲区

可以显著提高字节流的读写性能

对于字符流提升不明显,对于字符缓冲流而言关键点是两个特有的方法

3.字符缓冲流两个特有的方法是什么?

字符缓冲输入流BufferedReader:readLine()

字符缓冲输出流BufferedWriter:newLine()

转换流

字符流与字节流之间的桥梁

主要作用:字节流想要使用字符流中的方法

序列化流

序列化流的作用:可以把java中的对象写到本地文件中

学生类代码:

package test11;import java.io.Serializable;public class students implements Serializable {private int age;private String name;private static final long serialVersionUID=1L;public students() {}public students(int age, String name) {this.age = age;this.name = name;}@Overridepublic String toString() {return "students{" +"age=" + age +", name='" + name + '\'' +'}';}
}

序列化流代码样例:

public class xuliehua {public static void main(String[] args) throws IOException, ClassNotFoundException {//创建对象students s=new students(12,"张三");//创建序列化流ObjectOutputStream obj=new ObjectOutputStream(new FileOutputStream("src/main/java/test11/r",true));//写出数据obj.writeObject(s);//关闭资源obj.close();
}

序列化流的小细节

使用对象输出流将对象保存到文件时会出现NotserializableException异常

解决方案:需要让Javabean类实现Serializable接口

反序列化流

反序列化流的作用:可以把序列化到本地文件中的对象,读取到程序中来

反序列化流代码样例:

package test11;import java.io.*;public class xuliehua {public static void main(String[] args) throws IOException, ClassNotFoundException {//创建反序列流的对象ObjectInputStream ss=new ObjectInputStream(new FileInputStream("src/main/java/test11/r"));//读取数据Object o=ss.readObject();System.out.println(o);ss.close();}
}

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

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

相关文章

FPGA在医疗的应用,以4K医疗内窥镜为例

前言 随着技术的发展,医学影像作为科学技术的主要成就之一,在无创诊断和治疗领域已经有了多种应用。其中一个应用是内窥镜,在20世纪90年代,当利用电荷耦合装置将图像传输到显示器上成为可能时,内窥镜变得更加广泛。为…

牛客小白月赛90(A,B,C,D,E,F)

比赛链接 官方题解(视频) 这场偏思维,感觉好像没啥算法。E需要动态维护前 k k k 小,F是个离散化加dp,状态和递推方程比较 非常规,建议还是看一下涨涨姿势。 A 小A的文化节 思路: 签到 cod…

Open3D(C++) 0~1归一化到0~255

目录 一、算法原理二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 0-1归一化到0~255的计算原理如下: g ′ = 255 ∗

C语言 递归

递归指的是在函数的定义中使用函数自身的方法。 举个例子: 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚&…

【C语言基础】:文件操作详解(后篇)

文章目录 一、文件的顺序读写1.1 顺序函数读写函数介绍1.2 fgetc函数和fputc函数1.3 fputs函数和fgets函数1.4 fprintf函数和fscanf函数1.5 fwrite函数和fread函数 二、文件的随机读写2.1 fseek函数2.2 ftell函数2.3 rewind函数 三、文件读取结束的判定3.1 feof函数 四、文件缓…

React 集成三方登录按钮样式的插件库

按钮不提供任何社交逻辑。 效果如下: 原地址:https://www.npmjs.com/package/react-social-login-buttons 时小记,终有成。

结合fastapi-users与Langserve轻松实现大语言接口用户认证

在做大模型开发的过程中,相信很多小伙伴都是对大模型开发感兴趣,却对 fastapi 这个框架并不熟悉,但是,实际开发的项目确需要用户鉴权,这时候就会很头疼,查阅官方文档发现,官方虽然有例子&#x…

2023年下半年系统架构设计师下午论文真题

试题一 论边缘计算及其应用 边缘计算是在靠近物或数据源头的网络边缘侧,融合网络、计算、存储、应用核心能力的分布式开放平台(架构),就近提供边缘智能服务。边缘计算与云计算各有所长,云计算擅长全局性、非实时、长周期的大数据处理与分析&…

行云堡垒国密算法应用与信创支持

一、 国密算法和信创的介绍 1.1 什么是国密算法 国密算法是国家密码管理局制定颁布的一系列的密码标准,即已经被国家密码局认定的国产密码算法,又称商用密码(是指能够实现商用密码算法的加密,解密和认证等功能的技术)…

uniapp 小程序获取WiFi列表

<template><view ><button click"getWifiList">获取WiFi列表</button><scroll-view:scroll-top"scrollTop"scroll-yclass"content-pop"><viewclass"itemInfo"v-for"(item, index) in wifiList&…

JetBrains RubyMine 2024.1 发布 - 最智能的 Ruby 与 Rails IDE

JetBrains RubyMine 2024.1 发布 - 最智能的 Ruby 与 Rails IDE 请访问原文链接&#xff1a;JetBrains RubyMine 2024.1 (macOS, Linux, Windows) - 最智能的 Ruby 与 Rails IDE&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org…

Excel·VBA二维数组S形排列

与之前的文章《ExcelVBA螺旋数组函数》将一维数组转为二维螺旋数组 本文将数组转为S形排列的二维数组&#xff0c;类似考场座位S形顺序 Function S形排列(ByVal arr, ByVal num_rows&, ByVal num_cols&, Optional ByVal mode$ "row")将数组arr转为num_rows…