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

目录

字符输入流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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

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

昇思MindSpore学习笔记6-04计算机视觉--Shufflenet图像分类

摘要: 记录MindSpore AI框架使用ShuffleNet网络对CIFAR-10数据集进行分类的过程、步骤和方法。包括环境准备、下载数据集、数据集加载和预处理、构建模型、模型训练、模型评估、模型测试等。 一、概念 1.ShuffleNet网络 旷视科技提出的CNN模型 应用在移动端 通…

【JavaSE】图书管理系统

目录 最终效果book包Book类BookList类 user包User类AdmiUser类(管理员类)NormalUser类(普通用户类) opeeration包IOperation接口FindOpertion类(查找操作)AddOpertion类(增加操作)De…

关于解决双屏幕鼠标移动方向问题

1.点开设置》系统》屏幕 2.分清屏幕标识,一般笔记本为1 3.点击要移动的屏幕,然后按住鼠标左键不方进行移动 感谢您的浏览,希望可以帮到您!

探索多模态预训练:MAnTiS、ActionCLIP、CPT与CoOp的Prompt技巧

上一篇博文整理了 预训练新范式(Prompt-tuning,Prefix-tuning,P-tuning) ,主要是围绕NLP上的成果,具体的概念本文也不做过多赘述。本篇文章将主要整理几篇有代表性的Prompt方法在多模态领域中的应用。 Mult…

unity使用 MQTT复现plant simulate仿真

unity使用 MQTT复现plant simulate仿真 一、plant simulate端配置 1、plant simulate MQTT组件配置,该组件在类库的信息流类目下,端口不变,填写ip即可; 2、设备配置界面,在控件入口和出口处各挂一个脚本,当物料出入该设备时会分别触发执行这两个脚本,粘贴如下代码; E…

视频怎么压缩变小?最佳视频压缩器

即使在云存储和廉价硬盘空间时代,大视频文件使用起来仍然不方便。无论是存储、发送到电子邮件帐户还是刻录到 DVD,拥有最好的免费压缩软件可以确保您快速缩小文件大小,而不必担心视频质量下降。继续阅读以探索一些顶级最佳 免费视频压缩器选项…

小红书矩阵管理系统:多账号运营的智能解决方案

随着社交媒体的多元化发展,内容创作者和品牌商越来越需要一个能够高效管理多个账号的系统。小红书作为国内领先的生活分享平台,其矩阵管理系统应运而生,为用户带来了多账号发布、批量剪辑视频以及一键分发的便捷功能。本文将详细介绍小红书矩…

必看!微信小程序必备证书!

微信小程序必备SSL证书。在日益增长的数字经济中,微信小程序已成为商家与消费者之间重要的交互平台。由于其便捷性和广泛的用户基础,越来越多的企业选择通过小程序来提供服务。然而,在开发和部署微信小程序时,确保数据安全是一个不…

数据结构笔记之树常考性质6

总结: 具有n个结点的m叉树的最小高度可以通过计算并向下取整得到。高度最小时的情况是所有结点都有m个孩子。

计算机前端面试题总结-暑期实习(答案补充2)

目录 技术方面 二、js 1.js数据类型 1)值类型(基本类型) 2)引用数据类型(对象类型) ​编辑 2.判断数据类型是否为数组类型 1)Array.isArray() 2)instanceof操作符 3) Object.prototyp…

飞猪惹怒12306,一张火车票让第三方平台耍尽手段……

小柴已经记不清铁路12306是多少次发出提醒,似乎每一次出行高峰,都会提醒一次。 比如一再强调,购买加速包、付费成为会员就能优先出票,找朋友助力砍一刀,就能获得更高的出票概率……都是假的。‍‍ 因为,铁…

PostgreSQL 中如何处理数据的并发更新冲突解决?

文章目录 一、并发更新冲突的场景二、PostgreSQL 中的并发控制机制(一) 封锁机制(二) 事务隔离级别 三、并发更新冲突的解决方法(一) 重试机制(二) 使用乐观并发控制(三&…

使用机器学习 最近邻算法(Nearest Neighbors)进行点云分析

使用 NearestNeighbors 进行点云分析 在数据分析和机器学习领域,最近邻算法(Nearest Neighbors)是一种常用的非参数方法。它广泛应用于分类、回归和聚类分析等任务。下面将介绍如何使用 scikit-learn 库中的 NearestNeighbors 类来进行点云数…

打开excel时弹出stdole32.tlb

问题描述 打开excel时弹出stdole32.tlb 如下图: 解决方法 打开 Microsoft Excel 并收到关于 stdole32.tlb 的错误提示时,通常意味着与 Excel 相关的某个组件或类型库可能已损坏或不兼容。 stdole32.tlb 是一个用于存储自动化对象定义的类型库&#x…

【解读大模型(LLM)的token】

文末有福利! 当人们谈论大型语言模型的大小时,参数会让我们了解神经网络的结构有多复杂,而token的大小会让我们知道有多少数据用于训练参数。 正像陆奇博士所说的那样,大型语言模型为从文本生成到问题回答的各种任务提供了令人印象…

2024年的设计理念革新:快速获取设计趋势的资源集合!

随着2024年第三季度开始,今年的设计趋势也逐渐出现。与2023 年设计相比,趋势变化空间不大,大部分是在 2023 年度设计趋势的延伸和发展。即使趋势不会一直改变,了解趋势对设计师来说仍然非常重要。接下来,本文将与你分享…

拥抱应用创新,拒绝无谓的模型竞争

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

如何查询并下载韩国签证

登录大韩民国签证门户网站(https://www.visa.go.kr),点击“查询/签发”- “办理进度查询及打印”。 2) 输入护照号码、英文姓名及出生日期后点击查询。 3) 若签证通过,办理状态信息栏下面会显示签证信息。 4)点击“签证…

大数据信用评分太低,是什么原因引起的?

在大数据时代,个人的大数据信用评分变得尤为重要。它不仅影响着我们能否顺利地获得贷款、信用卡等金融服务,还在很多方面影响着我们的日常生活。那么,哪些原因可能会导致我们的大数据信用评分降低呢?本文将对此进行详细的总结,一…