JavaSE 面向对象程序设计进阶 IO流 字符输入输出流及底层原理

news2024/9/27 6:00:26

目录

字符输入流FileReader

空参的read方法

带参的read方法

字符输出流FileWriter

字符输入流底层原理

字符输出流底层原理


字符输入流FileReader

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

输出流 底层会把数据按照指定的编码方式进行编码 在变成直接写到文件当中

适用于纯文本文件的读写操作

底层就是字节流

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

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

下面四个都是抽象类

字符流

空参的read方法

FileReader

可以从纯文本文件中读取数据

字符流的底层也是字节流

默认也是一个字节一个字节读取的

如果遇到中文就会一次读取多个字节 GBK一次两个字节 UTF-8一次读三个字节

read()方法底层原理

默认也是一个字节一个字节读取,如果遇到中文就好一次读取多个

最后把十进制作为返回值

这个十进制数据代表字符集上的数字

读取二进制数据会进行解码转成十进制

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner sc=new Scanner(System.in);
        //创建对象并关联本地文件
        FileReader fr=new FileReader("untitled\\a.txt");

        int ch;
        while ((ch=fr.read())!=-1)
            System.out.print((char)ch);
        fr.close();
        //释放资源
    }
}

read方法默认一个字节一个字节进行读取

读取后方法底层进行解码转换成十进制

我们拿到的是一连串的十进制数,再进行强制类型转换

带参的read方法

创建字符输入流关联本地文件

读取数据,读到末尾返回-1

释放资源关流

核心是创建字符数组用字符数组接收数据,再统一输出

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {

        //创建对象
        FileReader fr=new FileReader("untitled\\a.txt");

        //读取数据 创建char类型的数组
        char []chars=new char[20];//一次读取二十个字符
        int len=0;//当前读取到的长度

        while((len=fr.read(chars))!=-1){
            //把数组中的数据便成字符串在进行打印
            System.out.println(new String(chars, 0, len));
            //表示只对读取到的数据进行打印 
        }

        fr.close();//关流
    }
}

带参数的read函数把读取数据,解码,强制转换三步合并了

直接把最后的字符放到数组里面

字符输出流FileWriter

创建字符输出流对象

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

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

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

写数据

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

释放资源

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

import java.io.FileWriter;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        FileWriter fw=new FileWriter("untitled\\a.txt");

        fw.write("多多");
        //会根据当前字符集的编码方式进行编码 把编码之后的数据写到文件当中去

        fw.close();
    }
}

write方法的形参可以是

字符串 字符数组 以及可以指定范围

字符输入流底层原理

读取数据是从数据源读取入内存

创建FileReader对象时

等于是创建了数据源和内存之间的通道

同时在内存创建了长度为8192的字节数组

这个数组又叫缓冲区

调用read方法,先判断缓冲区中是否有数据可以读取

第一次缓冲区没有数据

会从文件中读取数据,尽可能填满缓冲区

所以调用一次read方法就会把硬盘的数据放到缓冲区里面

如果文件中的数据较少,那么有多少数据就读取多少数据

然后每一次读取会从缓冲区中读取

减少了访问硬盘的次数,加快了读取速度

当文件中没有数据后,返回-1

字节流没有缓冲区 字符流有缓冲区

字符输出流底层原理

在写出的时候

会把所有的数据按照UTF-8进行编码

一个中文占三个字节

一个英文占一个字节

数据真正保存到目的地的时候 有三种情况

缓冲区装满了会保存到本地

也可以手动刷新 手动关流

个人号推广

博客主页

朱道阳-CSDN博客

Web后端开发

https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482

Web前端开发

https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482

数据库开发

https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482

项目实战

https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482

算法与数据结构

https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482

计算机基础

https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482

回忆录

https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482

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

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

相关文章

企业化运维(7)_Zabbix企业级监控平台

官网:Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution ###1.Zabbix部署### (1)zabbix安装 安装源 修改安装路径为清华镜像 [rootserver1 zabbix]# cd /etc/yum.repos.d/ [rootserver1 yum.repos.d]# vim zabbix.r…

SAP与易链SRM系统集成案例

一、项目环境 重庆润通控股(集团)有限公司成立于2007年,是一家集合汽柴油动力及终端、摩托车、储能电源、汽车零部件、金融服务等产业的多元化集团公司。现拥有员工超4000人,业务遍布全球80多个国家及地区,2021年营…

CDGA|数据治理:如何建立健全数据伦理和隐私保护机制?

随着数字化时代的到来,数据已成为推动社会进步和企业发展的重要资源。然而,随之而来的数据伦理和隐私保护问题也日益凸显。建立健全的数据治理体系,特别是强化数据伦理和隐私保护机制,已成为当务之急。 数据治理的重要性 数据治理…

GeoServer property 表达式注入代码执行漏洞(CVE-2024-36401)

GeoServer property 表达式注入代码执行漏洞(CVE-2024-36401) 1.漏洞描述 GeoServer 是一个开源的服务器软件,使用 Java 编写,主要功能是允许用户共享和编辑地理空间数据。它在设计时就考虑到了互操作性,支持使用开放标准来发布多种主流格式…

从新手到高手:Scala函数式编程完全指南,Scala IF…ELSE 语句(8)

1、Scala IF…ELSE 语句 Scala IF…ELSE 语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。 可以通过下图来简单了解条件语句的执行过程: 1.1、if 语句 if 语句有布尔表达式及之后的语句块组成。 语法 if 语句的语法格式如下&…

After Detailer让图像自动修复

After Detailer(简称adetailer)是一个Stable Diffusion的自动Web-UI扩展,它能够自动化修复图像中的不完整部分,例如模糊的人脸等常见问题。在这篇文章中,你将了解它的工作原理、如何使用它,以及一些常见的使…

@RequestPart 与 @RequestBody、@RequestParam 注解的异同点

前言 RequestPart 注解是我们在JavaEE 开发中,比较常见的一个注解。它经常会与 RequestBody 、RequestParam 注解进行比较,这篇博文我们以案例和源码相结合,分析这几个注解的异同点。 案例演示 创建实体类 User Data NoArgsConstructor A…

图片海报怎么做成二维码展示?二维码分享图片的制作技巧

怎么把图片的宣传海报做成二维码呢?在做活动或者产品宣传时,都会制作精美的图片海报,除了打印传单或者制作展板的方式来展示外,将海报图片生成二维码,通过分享二维码来实现图片海报的快速传播,能够有效提升…

[数据结构] 基于插入的排序 插入排序希尔排序

标题:[数据结构] 排序#插入排序&希尔排序 水墨不写bug 目录 (一)插入排序 实现思路: 插入排序实现: (二)希尔排序 希尔排序的基本思想: 希尔排序的实现: 正…

【转】-java多线程读写锁ReadWriteLock

Java多线程中读写锁ReadWriteLock的使用 该博客转载自​**lavimer​的​Java多线程中读写锁ReadWriteLock的使用** 1. 概念 读写锁分为读锁和写锁,多个读锁之间是不需要互斥的(读操作不会改变数据,如果上了锁,反而会影响效率),…

IPXProxy海外代理IP在MultiLogin指纹浏览器中的配置教程

Multilogin指纹浏览器是一款付费浏览器,它为用户提供了拥有多个虚拟浏览器配置文件的机会。作为最好的指纹浏览器之一,它常常被用来创建或管理多个账户,当然在这个过程,代理IP是不可或缺的一部分。下面给大家代理在MultiLogin指纹…

【企业级监控】Docker部署Zabbix与监控主机

基于Docker部署Zabbix6.2 文章目录 基于Docker部署Zabbix6.2资源列表基础环境一、首先安装Docker1.1、部署Docker1.2、配置Docker加速器 二、部署Zabbix组件介绍三、部署Zabbix3.1、安装数据库容器3.2、安装zabbix-java-gateway3.3、安装zabbix-server3.4、安装zabbix-web界面3…

大数据下的用户研究:深度洞察与精准决策的引擎

文章目录 一、大数据时代的用户研究新机遇二、大数据用户研究的流程与关键技术三、大数据用户研究的实践案例四、大数据用户研究的挑战与展望《用户研究方法:卓越产品和服务的用户研究技巧》内容及特色读者对象 在当今这个数据爆炸的时代,大数据已成为推…

microblaze时钟更改出现时序问题

在使用microblaze时,我给的时钟是200MHz的时钟,但会在跑布线的时候出现时序上的问题,一开始是没有任何的头绪,知道我尝试更改时钟的频率才发现问题的所在。 当我把200MHz的时钟改为100MHz的时钟时,就不会出现时序上的…

Defensor 4.5:构建数据资产为中心的安全运营体系

5月31日“向星力”未来数据技术峰会上,星环科技重磅发布数据安全管理平台 Defensor 4.5版本。新版本引入了以数据资产为中心的数据安全运营体系,通过智能化大模型技术,帮助企业快速、精准地识别核心重要资产;建设全局的数据安全策…

全球数字贸易中心解析_保税区保的是什么税_为什么保税区还要交税

保税区税收机制深度解析:保税免的是什么税?为何仍需缴税? 保税区概述 保税区,作为海关特殊监管区域的重要一环,享有国家高度开放的政策优惠与功能齐全的海关监管服务。它专为保税加工、保税物流和保税服务而设&#…

安防管理平台LntonCVS视频汇聚融合云平台智慧火电厂安全生产管理应用方案

中国的电力产业作为国民经济发展的重要能源支柱,被视为国民经济的基础产业之一。目前,我国主要依赖火力发电,主要燃料包括煤炭、石油和天然气等,通过燃烧转化为动能,再转变为电能输送至全国各地。火力发电量占全国发电…

给你的博客加上评论区

一个网站如果有评论功能,可以更好的和读者互动。VuePress 也有很多评论插件,这里简单介绍下,最后介绍本站所使用的 Twikoo。 大部分评论插件都是使用的 Github 或 Gitee 的 issue 功能,也就是用 issue 去存储评论;而 …

高压线束屏蔽效能测试之管中管法、线注入法

一、引言 上期推文介绍了高压线束屏蔽效能测试方法三同轴法,本篇文章将继续介绍高压线束相关测试方法——管中管法和线注入法。 二、管中管法 1、一般要求 管中管法参照IEC62153-4-7标准对高低压连接器进行零部件级屏蔽效能测试。在测试时,通过金属延长管…