java中IO知识点概念

news2024/9/23 11:18:51

这里写自定义目录标题

  • 内存中的数据以电子信号的形式表示,而磁盘中的数据是以磁场的方向表示。
  • 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.coloradmin.cn/o/1264040.html

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

相关文章

Python---lambda表达式

普通函数与匿名函数 在Python中,函数是一个被命名的、独立的完成特定功能的一段代码,并可能给调用它的程序一个返回值。 所以在Python中,函数大多数是有名函数 > 普通函数。但是有些情况下,我们为了简化程序代码,…

SpringSecurity+JWT实现权限控制以及安全认证

一.简介 Spring Security 是 Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 认证:验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户​ 授权&…

Numpy进阶

NumPy进阶80题完整版

DDD落地:有赞的生产项目,DDD如何落地?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如有赞、阿里、滴滴、极兔、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 谈谈你的DDD落地经验? 谈谈你对DDD的理解&#x…

Python基础语法之学习运算符

Python基础语法之学习运算符 一、代码二、效果 一、代码 print("1 1 ", 1 1) print("1 - 1 ", 1 - 1) print("1 * 1 ", 1 * 1) print("11 / 5 ", 11 / 5) print("11 // 5 ", 11 // 5) print("9 % 5 ", 9…

go标准库

golang标准库io包 input output io操作是一个很庞大的工程,被封装到了许多包中以供使用 先来讲最基本的io接口 Go语言中最基本的I/O接口是io.Reader和io.Writer。这些接口定义了读取和写入数据的通用方法,为不同类型的数据源和数据目标提供了统一的接…

工业产品3d交互展示数字云展厅更绿色环保

随着数字技术的飞速发展,3D全景汽车云展厅平台应运而生,为现代展览带来了前所未有的创新与变革。该平台以其独特的优点,为观众、艺术家和展商带来了全新的展览体验,开启了未来展览的新篇章。 首先,3D全景汽车云展厅平台…

gradle构建项目速度优化及排查方式

文章目录 一、前言二、Android项目优化1、相关配置2、构建速度分析 三、Gradle项目通用优化1、分析构建耗时2、使用配置进行优化3、优化依赖解析a. 避免不必要和未使用的依赖项b. 优化存储库顺序 c. 最小化动态和快照版本d. 通过构建扫描查找动态和变化的版本e. 通过构建扫描可…

Vue2问题:如何全局使用less和sass变量?

前端功能问题系列文章,点击上方合集↑ 序言 大家好,我是大澈! 本文约2400字,整篇阅读大约需要4分钟。 本文主要内容分三部分,如果您只需要解决问题,请阅读第一、二部分即可。如果您有更多时间&#xff…

【数据库】基于排序算法的去重,集合与包的并,差,交,连接操作实现原理,执行代价以及优化

基于两趟排序的其它操作 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏…

Windows环境下的JDK安装与环境配置

一、JDK下载 1、打开Oracle官方网站下载页 Java Downloads | Oracle 中国 2、选择Java archive页,在版本列表中选择需要下载的版本 3、选择系统环境对应的版本,点击对应的下载按钮,弹出技术许可勾选框 4、勾选Oracle技术许可协议 5、输入Or…

经典滑动窗口试题(二)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、水果成篮1、题目讲解2、讲解算法思路3、代码实现 二、找到字符串中所有字母异位词1、题目…

09. 智慧商城——订单结算、订单管理

01. 订单结算台 所谓的 “立即结算”&#xff0c;本质就是跳转到订单结算台&#xff0c;并且跳转的同时&#xff0c;需要携带上对应的订单参数。 而具体需要哪些参数&#xff0c;就需要基于 【订单结算台】 的需求来定。 (1) 静态布局 准备静态页面 <template><di…

抖音票务小程序开发:从零到一的全面指南

本文将深入介绍如何从零开始开发一款抖音票务小程序&#xff0c;为读者提供全面的指南&#xff0c;帮助他们实现从概念到实际应用的全过程。 第一步&#xff1a;理清需求与目标 在开发任何应用之前&#xff0c;清晰的需求和明确的目标是成功的关键。在这一阶段&#xff0c;你…

渗透测试考核--两层内网 cs windows socks5

这里考核为渗透 这里是网络拓扑图 这里记录一下 两台外网 两台内网 首先拿到C段 nmap进行扫描 外网1 nmap -p 80 172.16.17.2/24 主机存活 一般都是web服务入手 所以我们指定80端口 然后去查找开放的 最后获取到2个ip Nmap scan report for 172.16.17.177 Host is u…

泛微 E-Office sample权限绕过+文件上传组合漏洞Getshell

0x01 产品简介 泛微E-Office是一款标准化的协同 OA 办公软件&#xff0c;泛微协同办公产品系列成员之一,实行通用化产品设计&#xff0c;充分贴合企业管理需求&#xff0c;本着简洁易用、高效智能的原则&#xff0c;为企业快速打造移动化、无纸化、数字化的办公平台。 0x02 漏…

整车测试中的UDS诊断

UDS&#xff08;Unified Diagnostic Services&#xff0c;统一的诊断服务&#xff09;诊断协议是在汽车电子ECU环境下的一种诊断通信协议。这种通信协议被用在几乎所有由OEM一级供应商所制造的新ECU上面。这些ECU控制车辆的各种功能&#xff0c;包括电控燃油喷射系统&#xff0…

M3VSNET:无监督多度量多视图立体视觉网络(2021年)

M3VSNET&#xff1a;无监督多度量多视图立体视觉网络&#xff08;2021年&#xff09; 摘要1 引言2 相关工作3 实现方法3.1 网络架构 B. Huang, H. Yi, C. Huang, Y. He, J. Liu and X. Liu, “M3VSNET: Unsupervised Multi-Metric Multi-View Stereo Network,” 2021 IEEE Inte…

02-Java集合之双列集合,如HashMap,Hashtable,Properties,TreeMap的底层结构

双列集合 添加/获取/删除键值对原理 哈希表/散列表是一种将数组和单向链表融合在一起的数据结构 数组在查询方面效率很高,单向链表在随机增删方面效率较高,哈希表将以上的两种数据结构融合在一起后充分发挥它们各自的优点 双列集合以key和value这种键值对方式存储数据: key…

【算法】七大经典排序(插入,选择,冒泡,希尔,堆,快速,归并)(含可视化算法动图,清晰易懂,零基础入门)

​ 目录 一、排序的概念及其运用1.1 排序的概念1.2 排序的应用1.3 常见的排序算法 二、常见排序算法的实现2.1 插入排序2.1.1 直接插入排序2.1.2 希尔排序2.1.3 直接插入排序和希尔排序的性能对比 2.2 选择排序2.2.1 直接选择排序2.2.2 堆排序2.2.3 直接选择排序和堆排序的性能…