java中IO知识点概念

这里写自定义目录标题

  • 内存中的数据以电子信号的形式表示,而磁盘中的数据是以磁场的方向表示。
  • 1.流的分类
  • 2.File类
  • 3.流的API 关键
  • 4.理解缓冲的作用-一次性多拿些
    • 读写文件的时候为什么要有缓冲流 -意义是什么
    • 缓冲流的使用
  • 5.路径问题
  • 6.文件的创建
  • 7.内存和磁盘存储本质
  • 8.为什么内存可以提供非常高速的数据读写访问,而机械盘的读写速度相对较慢的原因之一。
  • 9.如何改变磁场的状态
  • 10.内存数据写入磁盘
  • 11.什么是内存泄漏内存溢出 有什么区别
  • 12.难道即使运行程序关闭了 内存也不会释放嘛
  • 12.转换流
  • 13.字节与字符的区别
  • 14.字符如果进行各种二进制运算 需要根据相应的编码规则转换成对应的二进制嘛
  • 15. apache-common包 封装了哪些操作
  • 16.是不是相当于对 jdk 源码进行了二次封装

内存中的数据以电子信号的形式表示,而磁盘中的数据是以磁场的方向表示。

1.流的分类

按数据的流向不同分为:输入流输出流
按操作数据单位的不同分为:字节流(8bit)字符流(16bit)
根据IO流的角色不同分为:节点流处理流

2.File类

想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。

3.流的API 关键

字节流 InputStream OutputStream
字符流 Reader Writer

4.理解缓冲的作用-一次性多拿些

读写文件的时候为什么要有缓冲流 -意义是什么

就是为了一次性从磁盘多读一些内容到内存或者从内存中多取些数据到磁盘这是缓冲区的意义。

简单来说,当我们使用缓冲流读取或写入数据时,数据会首先被缓存到内存中的缓冲区,
直到缓冲区被填满或达到一定的阈值后,才会将数据批量写入磁盘或者网络。
这样的做法可以避免频繁的IO操作,减少了程序的开销,提高了读写效率。
除此之外,缓冲流还具有自动关闭流的功能,可以自动地释放资源,避免了忘记关闭流而导致资源泄露的问题。

在这里插入图片描述

缓冲流的使用

// 创建字节缓冲输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("abc.jpg"));
// 创建字节缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("abc_copy.jpg"));
// 创建字符缓冲输入流
BufferedReader br = new BufferedReader(new FileReader("br.txt"));
// 创建字符缓冲输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));

5.路径问题

**绝对路径:**从盘符开始的路径,这是一个完整的路径。
**相对路径:**相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。

6.文件的创建

1.File f = new File(“a.txt”);
区分 f.mkdir()和f.mkdirs()
2.在某个目录下创建文件
File f5= new File(“newDira\newDirb”);
System.out.println(“newDira\newDirb创建:” + f5.mkdirs());
File file = new File(f5,“a.txt”);

7.内存和磁盘存储本质

内存(RAM)是计算机系统中的随机存取存储器。它由一组芯片组成,每个芯片上有许多存储单元,每个存储单元可以存储一个位(0或1)。内存的存储方式是电子信号,每个存储单元通过电流的开关状态来表示0或1。

内存是易失性存储器,这意味着当计算机断电时,内存中存储的数据会丢失。因此,内存主要用于存储正在运行的程序和临时数据。当计算机启动时,操作系统和其他应用程序会加载到内存中,CPU可以快速从内存中读取指令和数据进行处理。

机械盘(如硬盘或固态硬盘)是计算机系统中的永久存储器。它由一个或多个磁盘片组成,每个磁盘片上有许多磁道和扇区。磁盘片在高速旋转的同时,磁头可以移动到特定的磁道上读写数据。机械盘的存储方式是通过改变磁场来表示0或1,磁性材料在磁场的作用下可以保持稳定状态

机械盘是非易失性存储器,这意味着即使计算机断电,磁盘中的数据仍然可以保持。因此,机械盘主要用于长期存储文件、操作系统和应用程序等永久数据。

总结来说,内存是计算机系统中的临时存储器,以电子信号的形式存储数据,读写速度非常快,但断电后数据会丢失;机械盘是计算机系统中的永久存储器,以改变磁场的方式存储数据,读写速度相对较慢,但数据在断电后仍然保持。它们在存储方式和性质上存在本质的区别,用于不同的存储需求和目的。

8.为什么内存可以提供非常高速的数据读写访问,而机械盘的读写速度相对较慢的原因之一。

改变电流状态比改变磁场状态要快是因为在内存和机械盘中所使用的物理原理不同,导致了其存储速度上的差异。

  • 内存中的存储单元是由电子器件组成,数据以电流的开关状态来表示0或1。由于电子器件的特性,电流可以非常迅速地在导体中传播,因此改变电流状态的速度非常快。当CPU需要读取或写入内存中的数据时,电子信号可以立即传输到相应的存储单元,实现快速的数据访问和操作。

  • 机械盘中的存储单元是由磁性材料组成,数据以磁场的方向来表示0或1。在机械盘中,磁头需要移动到特定的磁道上才能进行读写操作,而且改变磁场的状态需要一定的时间。虽然机械盘的技术也在不断改进,但是相较于内存中的电子传输速度,改变磁场状态的速度仍然较慢。

因此,由于内存中的数据是以电子信号的形式存储,并且电子传输速度极快,所以改变电流状态比改变磁场状态更快。这也是为什么内存可以提供非常高速的数据读写访问,而机械盘的读写速度相对较慢的原因之一。

9.如何改变磁场的状态

磁场的状态可以通过改变磁性材料中的磁向来实现。在机械盘中,磁性材料通常是一层铁氧化物涂覆在磁盘片表面上,每个磁盘片上包括许多磁道和扇区,数据就存储在这些磁道和扇区中。

磁盘驱动器中的磁头包括一个电磁线圈,当电流通过线圈时,它会产生磁场。通过调整线圈中的电流方向和强度,磁头可以在磁盘上创建或反转一个磁场,从而将磁性材料中的磁向进行相应的改变。这种方法可以实现对磁盘中数据的读写操作。

具体地说,在写入数据时,磁头会被定位到特定的扇区上,电流被应用到线圈上,使其产生一个磁场,磁场的极性和大小被精确控制,以在磁性材料中创建一个特定的磁场模式,表示0或1。在读取数据时,磁头会被定位到特定的扇区上,电流被应用到线圈上,以检测磁性材料中的磁场,将其转换为电信号,并将其发送到计算机系统中进行处理。

总之,改变磁场状态主要是通过在磁盘驱动器中使用磁头和电磁线圈,通过控制电流的方向和强度来创建或反转磁场,进而实现对磁盘中数据的读写操作。

10.内存数据写入磁盘

首先,内存中的数据以电子信号的形式表示,而磁盘中的数据是以磁场的方向表示。在将数据写入磁盘之前,需要经过以下过程:

  1. 数据编码:内存中的数据按照特定的编码规则进行转换,以便在磁盘中进行存储。这通常涉及将数据划分为数据块,并为每个数据块分配适当的校验位和标识符。

  2. 写入操作系统缓存:数据首先被写入操作系统的缓存中,这是一个临时的存储区域。操作系统会对数据进行管理,并将其合并为更大的数据块以提高写入效率。

  3. 磁盘调度和写入:操作系统会将数据从缓存中传输到磁盘控制器,然后再由磁盘控制器将数据写入磁盘。这个过程中,磁头会被定位到指定的磁道和扇区,并通过改变磁场的状态来写入数据。

  4. 磁盘刷新和持久化:在数据写入磁盘后,磁盘控制器会执行一系列操作,以确保数据被正确地刷新到磁盘表面,并持久化保存。

所以,内存到磁盘的操作涉及多个步骤,其中包括将内存中的数据经过编码、写入操作系统缓存、磁盘调度和写入等过程,最终将数据以磁场的方向存储在磁盘中。

11.什么是内存泄漏内存溢出 有什么区别

内存泄漏和内存溢出都是与程序中使用的内存相关的问题,但是它们所指的具体问题不同。

内存泄漏指的是程序中存在一些对象或变量,它们已经不再被使用,但是在内存中仍然占用着空间,从而导致程序的内存使用量越来越大。如果内存泄漏的问题一直得不到解决,程序最终可能会耗尽所有可用的内存资源,导致程序异常终止或崩溃。

例如,一个程序中创建了一个对象,但是在之后的代码中没有将该对象释放掉,这就会导致内存泄漏。如果这种情况发生在循环中或者在频繁执行的代码块中,那么内存泄漏的问题会非常严重。

内存溢出则指的是程序在申请内存时,由于内存不足或者内存分配不当,导致程序无法正常申请到所需要的内存资源,从而导致程序异常终止或崩溃。

例如,在Java中,如果我们不正确地使用数组或集合类,可能会导致内存溢出的问题。当数组或集合中的元素数量过多时,程序可能无法申请到足够的内存,从而导致内存溢出。

因此,内存泄漏和内存溢出都是与程序中使用的内存相关的问题,但是它们所指的具体问题不同。内存泄漏是指内存资源没有被正确释放,导致内存使用量增加;而内存溢出则是指程序所需内存超过了可用内存,导致程序无法正常运行。

12.难道即使运行程序关闭了 内存也不会释放嘛

当程序运行结束时,操作系统会自动回收程序所占用的内存资源。一般情况下,操作系统会在程序退出时自动释放内存。

然而,在某些情况下,程序运行过程中可能会出现内存泄漏的问题。内存泄漏指的是程序中分配的内存空间在不再使用时没有正确释放,导致这部分内存无法被回收,从而造成内存资源的浪费。

常见的内存泄漏情况包括:

  1. 未显式释放分配的内存:如果程序中使用动态内存分配函数(如mallocnew等)分配了内存,但在之后没有调用相应的释放函数(如freedelete等)进行释放,就会导致内存泄漏。

  2. 循环引用:在某些编程语言中,如果对象之间存在循环引用,即彼此引用对方,而没有外部引用指向它们,那么即使程序运行结束,这些对象也无法被垃圾回收机制回收,从而造成内存泄漏。

  3. 资源未正确释放:除了内存外,程序还可能涉及其他资源的分配和释放,如文件句柄、网络连接等。如果这些资源在程序运行结束后没有正确释放,也会造成类似的泄漏问题。

因此,虽然操作系统会在程序退出时自动释放内存,但需要注意编写代码时避免出现内存泄漏的情况,以确保程序能够正常释放资源并高效利用内存。

12.转换流

转换流是字节与字符间的桥梁–就是相互转换的媒介

13.字节与字符的区别

字节和字符都是计算机内部存储和传输信息的基本单位,但它们之间有一些区别。

  1. 存储方式不同:字节是计算机内部存储信息的最小单位,通常由8个二进制位组成,可以表示256种不同的状态。而字符则是一种抽象概念,通常指代人类语言中的一个字母、数字或符号,其表示方式可以是一个或多个字节,具体取决于所使用的字符编码。

  2. 编码方式不同:字节可以直接通过二进制编码来表示,而字符需要通过字符编码进行转换。计算机中常用的字符编码包括ASCII编码、Unicode编码等。

  3. 应用场景不同:字节主要用于表示二进制数据、图像、音频、视频等非文本数据,而字符主要用于表示文本信息,如HTML、XML、JSON等数据格式。

  4. 处理方式不同:字节可以进行各种二进制运算,如位运算、按位与、按位或等操作,而字符通常需要进行相应的解码和编码操作,才能进行相关处理。

总之,字节和字符都是计算机内部存储和处理信息的基本单位,但它们之间存在明显的区别。在日常编程中,需要根据不同的应用场景和需求,选择合适的数据类型进行存储和处理。

14.字符如果进行各种二进制运算 需要根据相应的编码规则转换成对应的二进制嘛

是的,如果要对字符进行各种二进制运算,需要先将其转换为对应的二进制表示。这个过程通常称为字符编码或字符集编码。

在计算机内部,字符通常用数字表示,不同的编码规则会使用不同的数字表示方式。例如,ASCII编码规则使用7位二进制数表示一个字符,可以表示128种不同的字符;而Unicode编码规则使用16位或32位二进制数表示一个字符,可以表示更多的字符。

要进行字符的二进制运算,需要先将字符转换为对应的二进制表示,然后进行相应的运算操作,最后再将得到的二进制结果转换回字符形式。这个过程中需要注意选择合适的编码方式,并避免出现编码转换错误的情况。

需要注意的是,并不是所有的字符都可以进行二进制运算。只有那些能够被编码为二进制数的字符才能进行这种运算。在进行字符的二进制运算时,还需要考虑到字符编码的一些特殊性质,如字节序、编码方案等,以确保运算结果的正确性和一致性。

15. apache-common包 封装了哪些操作

Apache Commons是一个开源的Java项目,旨在提供许多常见任务的可重用Java组件。其中,Apache Commons包含了多个子项目,每个子项目都专注于解决特定领域的常见问题。

以下是Apache Commons中一些常见子项目的主要功能:

  1. Apache Commons Lang:提供了许多有用的工具类,用于操作字符串、日期、枚举等。例如,StringUtils用于对字符串进行操作,DateUtils用于日期操作,EnumUtils用于枚举类型的处理等。

  2. Apache Commons IO:提供了对输入输出操作的支持,包括文件操作、流操作、文件过滤等。比如,FileUtils提供了一系列便捷的文件操作方法,IOUtils提供了一系列便捷的流操作方法等。

  3. Apache Commons Collections:提供了一系列扩展了JDK集合框架的集合类,以及一些其他有用的数据结构和工具类,如列表操作、映射操作、迭代器操作等。

  4. Apache Commons Math:提供了一系列数学相关的实用工具类和算法,包括线性代数、随机数生成、统计分布等各种数学运算。

  5. Apache Commons Codec:提供了对常见编解码算法的支持,包括Base64、MD5、SHA等常见加密算法。

除了上述子项目外,Apache Commons还包含其他一些子项目,涵盖了更多领域的常见问题,如配置文件解析、反射工具、命令行解析等。这些项目都旨在为Java开发人员提供高质量、可重用的通用组件,以简化开发工作并提高代码的可维护性和可读性。

16.是不是相当于对 jdk 源码进行了二次封装

Apache Commons项目的确提供了许多对JDK功能的二次封装,以简化开发人员的使用和提供更高级别的抽象。它们并不是对JDK源码的直接修改或替代,而是构建在JDK之上,提供了一些更便捷、易用、功能丰富的工具类、算法和数据结构。

Apache Commons的目标是填补JDK中某些领域的功能缺失,并提供更高级别的抽象,从而简化常见任务的实现。它提供了许多通用的、经过测试和优化的组件,使开发人员能够更快速地开发应用程序,而无需从头开始编写相关代码。

虽然Apache Commons与JDK有一些重叠的功能,但它们并不冲突,而是互相补充。开发人员可以根据具体需求选择使用JDK提供的原生功能还是Apache Commons提供的封装组件。 Apache Commons的设计哲学是保持与JDK的兼容性,并提供额外的功能和灵活性。

总而言之,Apache Commons项目是对JDK功能的二次封装,旨在提供更高级别、更易用的工具类、算法和数据结构,以简化开发人员的工作。它们并不替代JDK,而是为开发人员提供更多选择和便利。

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

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

相关文章

【3D程序软件】SideFX与上海道宁一直为设计师提供程序化 3D动画和视觉效果工具,旨在创造高质量的电影效果

Houdini是一个 从头开始构建的程序系统 使艺术家能够自由工作 创建多次迭代 并与同事快速共享工作流程 Houdini FX为 视觉特效艺术家创作故事片 广告或视频游戏 凭借其基于程序节点的工作流程 Houdini FX可让 您更快地创建更多内容 从而缩短时间并 在所有创意任务中…

ESP Multi-Room Music 方案:支持音频实时同步播放 实现音乐互联共享

项目背景 随着无线通信技术的发展,针对不同音频应用领域的无线音频产品正不断涌现。近日,乐鑫科技推出了基于 Wi-Fi 的多扬声器互联共享音乐通信协议——ESP Multi-Room Music 方案。该方案使用乐鑫自研的基于 Wi-Fi 局域网的音频同步播放技术&#xff…

51单片机使用串口查看程序执行的数据

51单片机使用串口查看程序执行的数据 1.概述 这篇文章介绍利用串口输出程序执行的数据,辅助我们调试程序,提高代码定位问题的效率。 2.硬件电路原理 3.串口助手查看程序数据 输出串口数据的方式分为CPU查询方式和中断方式。他们各有优缺点&#xff0…

源码剖析 Spring Security 的实现原理

Spring Security 是一个轻量级的安全框架,可以和 Spring 项目很好地集成,提供了丰富的身份认证和授权相关的功能,而且还能防止一些常见的网络攻击。我在工作中有很多项目都使用了 Spring Security 框架,但基本上都是浅尝辄止&…

Java 8 中 ReentrantLock 与 Synchronized 的区别

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

《微信小程序开发从入门到实战》学习三十五

4.2 云开发JSON数据库 4.2.3 权限控制 在云开发控制台可以对数据库中的数据进行操作, 在小程序端和云函数可以分别使用小程序API和服务端API对数据中的数据进行操作。 以上操作受到权限控制。 对数据库进行查询属于读操作,增删改操作属于写操作。 …

Day44力扣打卡

打卡记录 给小朋友们分糖果 II(容斥原理 隔板法) 链接 def c2(n):return n * (n - 1) // 2 if n > 1 else 0class Solution:def distributeCandies(self, n: int, limit: int) -> int:return c2(n 2) - 3 * c2(n - limit 1) 3 * c2(n - 2 * …

uniapp+微信小程序监听返回事件

代码附在最后 适用场景:uniapp开发微信小程序 需求是我点击列表进入数据信息的详情界面,点击详情界面的收藏,返回上一界面后,更新列表中的收藏情况。 目录 一、使用onUnload监听页面卸载 二、使用getCurrentPages()获取当前页…

【双指针】四数之和

四数之和 建议做过了解三数之和的思想再做这道题,思路是一样的~ 题目描述 18. 四数之和 - 力扣(LeetCode) 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [num…

Java大型智慧工地APP云平台源码带AI智能识别功能

智慧工地为建筑全生命周期赋能,用创新的可视化与智能化方法,降低成本,创造价值。 一、智慧工地APP概述 智慧工地”立足于互联网,采用云计算,大数据和物联网等技术手段,针对当前建筑行业的特点,…

C语言 移位操作符

<< 左移操作符>> 右移操作符 注&#xff1a;移位操作符的操作数只能是整数。 移位操作符移动的是二进制位。 整数的二进制表示有3种&#xff1a; 原码反码补码 正的整数的原码、反码、补码相同。 负的整数的原码、反码、补码是要计算的。 由负整数原码计算出反…

编写安全 JavaScript 代码的最佳实践

编写安全 JavaScript 代码的最佳实践 JavaScript 的动态特性使其成为事实上的浏览器语言和世界上最流行的编程语言。 JS 最受欢迎的有用功能之一是即时分析。这意味着浏览器在下载内容的同时执行代码&#xff0c;这显然有其优势。然而&#xff0c;这种程度的自由也伴随着问题…

【工业智能】Solutions

各类问题对应的解决方案 工艺参数推荐APC 排产调度智能算法强化学习 运筹优化空压机群控 预测 工艺参数推荐 APC 排产调度 智能算法 遗传算法 强化学习 DDQN 运筹优化 空压机群控 MIP混合整数规划 能耗优化 预测 电池容量预测 时序预测&#xff0c;回归预测 点击剩余…

【好用的个人工具】在Docker环境下部署Simple mind map思维导图工具

【好用的个人工具】在Docker环境下部署Simple mind map思维导图工具 一、Simple mind map介绍1.1 Simple mind map简介1.2 Simple mind map特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker co…

freerots启动过程分析(qemu仿真RISC-V架构为例)

1、前言 本文是基于qemu上virt板子适配的freertos系统源码进行讲解qemu安装可参考博客&#xff1a;《qemu源码下载和安装》&#xff1b;freertos移植到qemu上运行可参考博客&#xff1a;《移植freertos到qemu上运行》&#xff1b; 2、汇编代码部分 汇编文件&#xff1a;FreeR…

Web框架与Django路由层

Web框架 一 web框架 Web框架&#xff08;Web framework&#xff09;是一种开发框架&#xff0c;用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式&#xff0c;也为web行为提供了一套通用的方法。web框架已经实现了很多功能&…

基于单片机的智能饮水机控制系统(论文+源码)

1. 系统设计 本次智能饮水机控制系统的设计研究一款以STC89C52单片机为核心的智能饮水机控制系统&#xff0c;其主要功能设计如下&#xff1a; 1.该饮水机利用DS18B20数字温度传感器实时采集饮水机内水的温度&#xff0c;其检测温度范围为0-100℃&#xff0c;精度0.1℃&#…

拆解按摩器:有意思的按键与LED控制电路,学习借鉴一下!

拆解 外观和配色个人感觉还行,比较青春 拉开拉链&#xff0c;拆开外面的布面&#xff0c;里面还有一层纱面 按键部分使用魔术贴固定 拆开纱面后&#xff0c;看到里面的结构&#xff0c;整体是一个海绵 可以看到如下&#xff0c;电池&#xff0c;按键板&#xff0c;充电线的三条…

Java 设计模式——建造者模式

目录 1.概述2.结构3.实例3.1.产品类3.2.抽象建造者类3.3.具体建造者类3.4.指挥者类3.5.测试 4.优缺点5.使用场景6.模式扩展7.创建者模式对比 1.概述 建造者模式 (Builder Pattern) 是一种创建型设计模式&#xff0c;用于创建复杂对象。它将对象的构建过程分离成独立的部分&…

前端 | iframe框架标签应用

文章目录 &#x1f4da;嵌入方式&#x1f4da;图表加载显示&#x1f4da;100%嵌入及滑动条问题&#x1f4da;加载动画保留 前情提要&#xff1a; 计划用iframe把画好的home1.html&#xff08;echarts各种图表组成的html数据大屏&#xff09;嵌入整合到index.html&#xff08;搭…