JAVA——IO流

目录

1.概述

字节流:

2.分类

3.输入文件数据

1.创建对象

2.写出数据

3.释放资源

4.读出文件数据

1.创建对象

2.读取数据

3.释放资源

5.字符集

a.ASCII

b.GBK

c.Unicode

6.乱码

7.编码、解码常见方法

a.编码方法

1.默认方式编码

2.指定方式编码

b.解码方式

1.默认方式解码

2.指定方式解码

字符流:

8.概述

8.读取文件数据

a.创建字符输入流对象

b.读取数据

c.释放资源

9.输入文件数据

a.创建字符输出流对象

b.写入数据

c.释放资源

10.字符输入流原理

a.创建字符输入流对象

c.读取数据

11.字符输出流原理


1.概述

存储和读取数据的解决方案,用于读写文件,或网络中的数据

字节流:

2.分类

流的方向:

操作文件类型:

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

3.输入文件数据

1.创建对象

续写:

注意:如果想续写,打开续写开关即可,第二个参数为开关的位置,默认false为关闭续写,反之,true为打开续写,此时创建对象不会清空文件

不续写:

注意:

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

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

        3.如果文件已经存在,则会清空文件

2.写出数据

off:起始索引                                                         len:个数  

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

换行符:

windows:      \r\n    

Linux:            \n

Mac:             \r

3.释放资源

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

4.读出文件数据

1.创建对象

注意:如果文件不存在,就直接报错

2.读取数据

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

注意:

         1.一次读一个字节,读出来的是数据在ASCII上对应的数字

         2.读到文件末尾了,read方法返回-1

3.释放资源

单字节拷贝vs多字节拷贝

单字节拷贝

import java.io.*;
class Main {public static void main(String[] args) throws IOException {//输出文件对象FileInputStream fileInputStream = new FileInputStream("D:\\bbbb\\975a37e67072125d093411fa609c7ef9.mp4");//输入文件对象FileOutputStream fileOutputStream = new FileOutputStream("D:\\aaaa\\新建.mp4");int b;//取出数据long l = System.currentTimeMillis();while ((b=fileInputStream.read())!=-1){fileOutputStream.write(b);}long l1 = System.currentTimeMillis();fileOutputStream.close();fileInputStream.close();System.out.println(l1-l);}
}

运行结果

 

多字节拷贝

import java.io.*;
class Main {public static void main(String[] args) throws IOException {//输出文件对象FileInputStream fileInputStream = new FileInputStream("D:\\bbbb\\975a37e67072125d093411fa609c7ef9.mp4");//输入文件对象FileOutputStream fileOutputStream = new FileOutputStream("D:\\aaaa\\新建.mp4");int len;//取出数据byte [] b1=new byte[1024*1024*5];long l = System.currentTimeMillis();while ((len=fileInputStream.read(b1))!=-1){fileOutputStream.write(b1,0,len);}long l1 = System.currentTimeMillis();fileOutputStream.close();fileInputStream.close();System.out.println(l1-l);}
}

运行结果

5.字符集

a.ASCII

b.GBK

注意:

        1.汉字两个字节存储

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

        3.英文一个字节存储,兼容ASCII,二进制前面补0

c.Unicode

UTF-8(编码方式):

ASCII                1个字节

拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文             2字节

中日韩文字、东南亚文字、中东文字               3字节

注意:编码中文时,第一个字节的首位是1

6.乱码

产生原因:

                1.读取数据时未读完整个汉字

字节流:一次读取一个字节

                2.编码和解码时的方式不统一

处理方法:

                1.不要用字节流读取文本文件

                2.编码解码时使用同一个码表,同一个编码方式

7.编码、解码常见方法

a.编码方法

1.默认方式编码

2.指定方式编码

b.解码方式

1.默认方式解码

2.指定方式解码

字符流:

8.概述

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

特点:

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

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

使用场景:对于纯文本文件进行读写操作

8.读取文件数据

a.创建字符输入流对象

b.读取数据

字符读入数组:进行了强制类型转换

注意:

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

         2.读到文件末尾了,read方法返回-1

c.释放资源

9.输入文件数据

a.创建字符输出流对象

注意:

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

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

        3.如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关

b.写入数据

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

c.释放资源

10.字符输入流原理

a.创建字符输入流对象

底层:关联文件,并创建缓冲区(长度为8192的字节数组)

c.读取数据

 底层:

         1.判断缓冲区中是否有数据可以读取

         2.缓冲区没有数据:就从文件中获取数据,装到缓冲区中,每次尽可能装满缓冲区
如果文件中也没有数据了,返回-1

         3.缓冲区有数据:就从缓冲区中读取。

空参的read方法:一次读取一个字节,遇到中文一次读多个字节,把字节解码并转成十进制返回

有参的read方法:把读取字节,解码,强转三步合并了,强转之后的字符放到数组中

11.字符输出流原理

内存中也存在一个缓冲区(长度为8192的字节数组),从内存中的缓冲区向目的地文件中写出数据需要满足三种情况之一:

情况一:缓存区装满了

情况二:flush()刷新

情况三:close()关流

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

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

相关文章

4.7 大数据应用场景

文章目录 今天,我非常荣幸能与大家分享一个充满潜力和变革的主题——大数据的应用场景。在这个信息爆炸的时代,大数据已经成为推动各行各业发展的重要驱动力。接下来,我将带领大家探索大数据在不同行业中的神奇应用。 首先,让我们…

Wed前端入门——HTML、CSS

Wed前端入门——HTML、CSS 一般的页面有HTML、CSS以及JavaScript组成 HTML定义了页面的结构和内容&#xff0c;包括文本、图像、链接等等CSS用于定义页面的布局和样式JS用于添加交互性和动态功能作用 一、HTML 基本格式&#xff1a; <!-- 文档类型为HTML --> <!D…

大语言模型实战教程首发:基于深度学习的大规模自然语言处理模型LLM详解 -Shelly

我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 大模型的热度&#xff0c;实在是很高&#xff0c;诺奖也颁给了…

读书笔记《有效需求分析》业务场景梳理

1. 关键思考链 2. 执行流程 3. 执行细则 1&#xff09;最重要的是从业务流程到业务场景的梳理。 2&#xff09;主、变、支、管流程&#xff08;待解读&#xff09; 3&#xff09;排序业务场景&#xff08;待分析&#xff09; 4&#xff09;各分支判断是独立的且需要系统支持&a…

Vite创建Vue3项目以及Vue3相关基础知识

1.创建Vue3项目 1.运行创建项目命令 # 使用 npm npm create vitelatest2、填写项目名称 3、选择前端框架 4、选择语法类型 5、按提示运行代码 不出意外的话&#xff0c;运行之后应该会出现 下边这个页面 6.延伸学习&#xff1a;对比webpack和vite&#xff08;这个是面试必考…

JVM(HotSpot):直接内存及其使用建议

文章目录 一、什么是直接内存&#xff1f;二、特点三、使用案例四、直接内存的管理 一、什么是直接内存&#xff1f; Direct Memory&#xff1a;系统内存 普通IO&#xff0c;运行原理图 磁盘到系统内存&#xff0c;系统内存到jvm内存。 NIO&#xff0c;运行原理图 划分了一块…

Webpack 完整指南

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Webpack篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来webpack篇专栏内容:webpack介绍 目录 介绍 一、webpack 1.1、webpack是什么 1.2 webpack五个核心配置 1.…

FreeRTOS——中断管理

中断理论剖析 中断简介 中断是一种机制&#xff0c;用于处理高优先级的事件或故障。当一个中断事件发生时&#xff0c;单片机可以立即中断正在执行的程序&#xff0c;转而处理中断事件。这种机制可以提高系统的响应速度和实时性。 中断优先级分组设置 ARM Cortex-M使用了8位宽…

它思科技CTO聂玮奇:消除“AI幻觉”,搭建高可靠对话云平台丨数据猿专访

大数据产业创新服务媒体 ——聚焦数据 改变商业 近年来&#xff0c;大模型技术在全球范围内引起了广泛关注和应用热潮。 提到人工智能&#xff0c;很多人会想到它强大的运算能力和广泛的应用场景。如今&#xff0c;语言模型的发展如火如荼&#xff0c;但其中的“幻觉”问题却带…

川字结构布局/国字结构布局

1.串字结构布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style&g…

S7-200 SMART 与 S7-1200 之间 TCP 通信— S7-200 SMART 作为服务器

TCP 协议通信 TCP 通信为面向连接的通信&#xff0c;需要双方都调用指令以建立连接及交换数据。S7-200 SMART 与 S7-1200 通过 TCP 通信&#xff0c;在 S7-1200 调用 T-block 指令 ( TCON, TDISCON, TSEND, TRCV ) &#xff0c;在 S7-200 SMART 调用 Open User Communication …

网络爬虫-数美滑块验证码

仅供研究学习使用。 今天带来的是数美滑块验证码的逆向 目标站 --> 传送门 解决此类验证码 首先要解决滑动距离的判定 无论是使用selenium还是使用协议的方式来破解 都绕不开滑动距离的识别 滑动距离可以参考以前我博客上的方式&#xff0c;或者找一找开源的一些算法&am…

Go基础知识:切片

数组 Go 数组的大小是固定的&#xff0c;其长度是其类型的一部分&#xff08;[4]int并且[5]int是不同的、不兼容的类型&#xff09; var a [10]intb : [2]string{"Penn", "Teller"} b : [...]string{"Penn", "Teller"}package maini…

2.4 STM32启动过程

目录 一,启动Flow 1.1 初始化MSP 1.2 初始化PC 1.3 设置堆栈大小 1.4初始化中断向量表 1.5 调用初始化函数(可选) 1.6 调用__main 二,Reset_Handler函数 一,启动Flow 下面是stm32在内部FLASH启动的启动建议流程图,在stm32复位到执行我们程序的main函数的过程中,…

深入理解Redis锁与Backoff重试机制在Go中的实现

文章目录 流程图Redis锁的深入实现Backoff重试策略的深入探讨结合Redis锁与Backoff策略的高级应用具体实现结论 在构建分布式系统时&#xff0c;确保数据的一致性和操作的原子性是至关重要的。Redis锁作为一种高效且广泛使用的分布式锁机制&#xff0c;能够帮助我们在多进程或分…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《计及多重不确定性和时间相关性的虚拟电厂参与碳-绿证协同交易优化调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Gin框架操作指南07:路由与中间件

官方文档地址&#xff08;中文&#xff09;&#xff1a;https://gin-gonic.com/zh-cn/docs/ 注&#xff1a;本教程采用工作区机制&#xff0c;所以一个项目下载了Gin框架&#xff0c;其余项目就无需重复下载&#xff0c;想了解的读者可阅读第一节&#xff1a;Gin操作指南&#…

武汉正向科技|焦炉移动机车连锁控制系统的介绍

焦炉车辆连锁控制系统是采用格雷母线定位技术&#xff0c;无线数据传输技术以及计算机技术&#xff0c;实现推焦车、拦焦车、熄焦车、装煤车、导烟车的集中监控和系统管理&#xff0c;以及车间作业计划管理&#xff0c;作业实绩管理&#xff0c;作业联锁控制及安全控制等。 焦炉…

超详细的finalshell安装数据库以及数据库的基本操作

一、下载 MySQL Enterprise Edition Downloads | Oraclehttps://www.oracle.com/mysql/technologies/mysql-enterprise-edition-downloads.html 这边有不同的版本&#xff0c;要看你的操作系统&#xff08;centos7 / centos8&#xff09;安装的是哪个版本 我把连接提取出来了&…

JAVA中类和对象

一.类的创建&#xff1a; 比如我们创建狗类&#xff1a; public class Dog {public String name; //名字public int age; //年龄public double tall; //身高//狗的行为public void bark() {System.out.println("汪汪汪~~~");}public void wag() {System.out.printl…