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,而是为开发人员提供更多选择和便利。

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

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

相关文章

QT中的 容器(container)-大全

一、介绍 Qt库提供了一套通用的基于模板的容器类&#xff0c;可以用这些类存储指定类型的项。比如&#xff0c;你需要一个大小可变的QString的数组&#xff0c;则使用QVector<QString>。 这些容器类比STL&#xff08;C标准模板库&#xff09;容器设计得更轻量、更安全并…

i已学赋能智慧教育时代的幼儿教育

伴随“教育数字化战略行动”的深入开展,智慧教育正式成为国家战略。智慧教育延伸至家校社教育的每个阶段。当前,为适应智慧教育发展趋势,我国制定了《中国教育现代化2035》《教育部关于加强“三个课堂”应用的指导意见》《教育信息化2.0行动计划》等文件。幼儿作为智慧教育、智…

Blazor Select 实现点击一次选项触发一次后台事件

Blazor的官方案例中&#xff0c;Select组件只有两个事件 1、OnSelectedItemChanged 每次选项的时候改变触发&#xff0c;如果你点击同一个选项是不会触发后台的方法的 2、OnBeforeSelectedItemChange 我们可以用这个事件实现每次点击同一个选项都可以触发后台事件 需要注意下最…

OCR文字识别工具 Cisdem OCRWizard激活最新 for Mac

为了提高内容识别的准确性&#xff0c;Cisdem OCRWizard提供供您选择两种模式&#xff1a;文件或名片。此外&#xff0c;它会自动分析的内容&#xff0c;标志着不同颜色的页面上几个区域根据给定部分的性质&#xff1a;文本&#xff08;绿色标记&#xff09;&#xff0c;图像&a…

Stable Diffusion绘画系列【3】:二次元动漫画风

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

单片机BootLoader是咋回事?

BootLoader的定义&#xff1a; CPU进入APP之前运行的一小段程序代码就叫做BootLoader。它是由程序员编写的&#xff0c;作用是更新应用程序。这也就说明了只有BootLoader的单片机才可以升级。有的产品有升级的需要就需要BootLoader了。 单片机的启动过程可以这么叙述&#xff…

ArrayList源码全面解析

一、概述 ArrayList 是 java 集合框架中比较常用的数据结构,继承自 AbstractList&#xff0c;实现了 List 接口。底层采用数组来实现。ArrayList 实现了java.io.Serializable接口&#xff0c;这意味着ArrayList支持序列化&#xff0c;能通过序列化去传输。 1.1、底层数据结构…

fiddler设置手机端抓包看这篇文章就足够了,轻松解决!

fiddler设置手机端抓包 安卓手机抓包 第一步&#xff1a;配置电脑和安卓的相关设置 1、手机和fiddler位于同一个局域网内&#xff1b;首先从fiddler处获取到ip地址和端口号&#xff1a; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; &#xff0c;点…

10年资深码农,聊聊程序员的35岁危机

程序员的一天&#xff0c;日常都在做什么&#xff1f; 很多外行以及初入 IT 行业的从业者&#xff0c;往往只看到了高薪、加班、敲代码的标签&#xff0c;那程序员的日常究竟是什么样的&#xff1f; 当代程序员的一天&#xff1a;聊天、开会、写代码 哪种技术最热门与能拿到高…

Shell编程基础 – for循环

Shell编程基础 – for循环 Shell Scripting Essentials - for Loop 大多数编程语言都有循环的概念和语句。如果想重复一个任务数十次&#xff0c;无论是输入数十次&#xff0c;还是输出数十次&#xff0c;对用户来说都不现实。 因此&#xff0c;我们考虑如何用好Bash Shell编…

(Spring学习06)Spring之循环依赖底层源码解析

什么是循环依赖&#xff1f; 很简单&#xff0c;就是A对象依赖了B对象&#xff0c;B对象依赖了A对象。 比如&#xff1a; // A依赖了B class A{public B b; }// B依赖了A class B{public A a; }那么循环依赖是个问题吗&#xff1f; 如果不考虑Spring&#xff0c;循环依赖并不…

浅谈STL中的分配器

分配器是STL中的六大部件之一&#xff0c;是各大容器能正常运作的关键&#xff0c;但是对于用户而言确是透明的&#xff0c;它似乎更像是一个幕后英雄&#xff0c;永远也不会走到舞台上来&#xff0c;观众几乎看不到它的身影&#xff0c;但是它又如此的重要。作为用户&#xff…

计算机缺少vcruntime140_1.dll的5个解决方法,轻松解决dll缺失问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“缺少vcruntime140_1.dll”。这个错误提示通常出现在运行某些程序或游戏时&#xff0c;这个错误通常会导致某些应用程序无法正常运行。那么&#xff0c;如何解决缺少vcruntime140_1.dll的问…

Vue框架学习笔记——事件处理:v-on指令+methods

文章目录 前文提要事件处理的解析过程&#xff0c;v-on:事件名样例代码如下&#xff1a;效果展示图片&#xff1a;v-on:事件名"响应函数"v-on简写形式响应函数添加响应函数传参占位符"$event"注意事项 前文提要 本人仅做个人学习记录&#xff0c;如有错误…

深度学习框架配置

目录 1. 配置cuda环境 1.1. 安装cuda和cudnn 1.1.1. 显卡驱动配置 1.1.2. 下载安装cuda 1.1.3. 下载cudnn&#xff0c;将解压后文件复制到cuda目录下 1.2. 验证是否安装成功 2. 配置conda环境 2.1. 安装anaconda 2.2. conda换源 2.3. 创建conda环境 2.4. pip换源 3.…

Linux以nohup方式运行jar包

1、在需要运行的jar包同级目录下建立启动脚本文件&#xff1a; 文件内容&#xff1a; #! /bin/bash #注意&#xff1a;必须有&让其后台执行&#xff0c;否则没有pid生成 jar包路径为绝对路径 nohup java -jar /usr/local/testDemo/jdkDemo-0.0.1-SNAPSHOT.jar >/us…

MX6ULL学习笔记 (一)交叉工具链的安装

前言&#xff1a; ARM 裸机、Uboot 移植、Linux 移植这些都需要在 Ubuntu 下进行编译&#xff0c;编译就需要编译 器&#xff0c;Ubuntu 自带的 gcc 编译器是针对 X86 架构的&#xff01;而我们现在要编译的是 ARM 架构的代码&#xff0c;因为我们编译的代码是需要烧写到ARM板子…

nacos集群开箱搭建-linux版本搭建

原创/朱季谦 nacos是一款易于构建云原生应用的动态服务发现、配置管理和服务管理平台&#xff0c;简单而言&#xff0c;它可以实现类似zookeeper做注册中心的功能&#xff0c;也就是可以在springcloud领域替代Eureka、consul等角色&#xff0c;同时&#xff0c;还可以充当spri…

吴恩达《机器学习》10-6-10-7:学习曲线、决定下一步做什么

一、学习曲线 1. 学习曲线概述 学习曲线将训练集误差和交叉验证集误差作为训练集实例数量&#xff08;m&#xff09;的函数绘制而成。这意味着从较少的数据开始&#xff0c;逐渐增加训练集的实例数量。该方法的核心思想在于&#xff0c;当训练较少数据时&#xff0c;模型可能…

MVVM 模式与 MVC 模式:构建高效应用的选择

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…