首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么FileOutputStream写入磁盘上的不同位置?

FileOutputStream写入磁盘上的不同位置是由于磁盘的物理结构和文件系统的工作原理所决定的。

磁盘是由多个盘片叠放而成的,每个盘片都被划分为多个磁道和扇区。磁道是盘片上的一个圆环,而扇区是磁道上的一个小块。当数据被写入磁盘时,磁头会移动到指定的磁道上,然后在该磁道的扇区中进行写入操作。

文件系统是操作系统用来管理磁盘上文件存储的一种机制。它将文件划分为多个逻辑块,并将这些逻辑块映射到磁盘上的物理扇区。当使用FileOutputStream写入文件时,操作系统会根据文件系统的映射关系将数据写入对应的物理扇区。

由于磁盘的物理结构和文件系统的工作原理,不同位置的写入操作可能会导致不同的性能和效果。例如,写入磁盘的不同位置可能会导致不同的寻道时间和旋转延迟,从而影响写入速度。此外,文件系统可能会对不同位置的写入进行不同的优化策略,例如将连续的数据写入相邻的扇区以提高读取性能。

总结起来,FileOutputStream写入磁盘上的不同位置是由于磁盘的物理结构和文件系统的工作原理所决定的,不同位置的写入可能会导致不同的性能和效果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

计算机组成原理:第七章 外存与IO设备

读操作:当磁头经过载磁体磁化元时,由于磁头铁芯是良好材料,磁化元磁力线很容易通过磁头而形成闭合通回路。不同极性磁化元在铁芯里方向是不同。...通过电-变换,利用磁头写线圈中脉冲电流,可把一位二进制代码转换成载磁体存储元不同剩磁状态;反之,通过-电变换,利用磁头读出线圈,可将由存储元不同剩磁状态表示二进制代码转换成电信号输出。...通常,写入和读出是合用一个磁头,故称之为读写磁头。每个读写磁头对应着一个信息记录磁道。 7.2.2 磁盘工作过程和分类 1....磁盘上这种磁道和扇区排列称为格式。...存取时间:存取时间是指从发出读写命令后,磁头从某一起始位置移动至新记录位置,到开始从盘片表面读出或写入信息加上传送数据所需要时间。

1.1K70

(57) 二进制文件和字节流 计算机程序思维逻辑

先使用mark方法将当前位置标记下来,在读取了一些字节,希望重新从标记位置读时,调用reset方法。...能够重复读取不代表能够回到任意标记位置,mark方法有一个参数readLimit,表示在设置了标记后,能够继续往后读最多字节数,如果超过了,标记会无效。为什么会这样呢?...需要说明是文件输出流FileOutputStream,你可能会认为,调用flush会强制确保数据保存到硬盘上,但实际上不是这样,FileOutputStream没有缓冲,没有重写flush,调用flush...要确保数据保存到了硬盘上,可以调用FileOutputStream特有方法。 close一般会首先调用flush,然后再释放流占用系统资源。...,最低位最后写入 writeUTF: 将字符串UTF-8编码字节写入,这个编码格式与标准UTF-8编码略有不同,不过,我们不用关心这个细节。

1.3K100

Linux知识体系之磁盘与档案系统管理

而当磁头固定不动,硬盘转一圈所画出来圆就是所谓磁道(Track)。而一个硬盘中可能具有多个硬盘盘,所有硬盘盘上面相同半径那一个磁道就组成了所谓柱(Cylinder)。 ?...另外,硬盘在读取时,主要是 硬盘盘会转动,利用机械手臂将磁头移动到正确数据位置。然后将数据依序读出。...由于机械手臂上磁头与硬盘盘接触是很细微空间,如果有抖动或者是脏污在磁头与硬盘盘之间时,就会造成数据损毁或者是实体硬盘整个损毁。 硬盘分隔(Partition),为什么要进行磁盘分隔?...因为我们必须告诉操作系统,可以存储区域是由A柱到BB柱,如此一来,操作系统才能够控制磁盘磁头去A-B范围内柱存取数据。也就是记录每一个分割区(Partition)起始与结束柱。   ...在这个区域内记录就是磁盘里所有分割信息,以及开机时候可以进行开机管理程序写入处所。

94750

Java基础总结大全(3)

ListIterator listIterator(int index) 返回此列表中元素列表迭代器(按适当顺序),从列表中指定位置开始。...会先看里面有没有该对象,有就直接拿出来用,这样就节省了内存空间。...(5)按照流流向不同分为:输入流,输出流 2、IO流常用基类: (1)字节流 输出字节流:OutputStream:字节写入流抽象类 |--->FileOutputStream: 字节写入流...3、IO流常用字节流基类子类: **写入流: (1)FileOutputStream: **构造方法: FileOutputStream(String name) 创建一个向具有指定名称文件中写入数据输出文件流...(1)需求1:在硬盘上创建一个文件并写入信息(字节流写入时没有刷新) FileOutputStream fos = new FileOutputStream("g:\\filestream.txt

1.1K70

Java基础总结大全(3)

ListIterator listIterator(int index) 返回此列表中元素列表迭代器(按适当顺序),从列表中指定位置开始。...会先看里面有没有该对象,有就直接拿出来用,这样就节省了内存空间。...(5)按照流流向不同分为:输入流,输出流 2、IO流常用基类: (1)字节流 输出字节流:OutputStream:字节写入流抽象类 |--->FileOutputStream: 字节写入流...3、IO流常用字节流基类子类: **写入流: (1)FileOutputStream: **构造方法: FileOutputStream(String name) 创建一个向具有指定名称文件中写入数据输出文件流...(1)需求1:在硬盘上创建一个文件并写入信息(字节流写入时没有刷新) FileOutputStream fos = new FileOutputStream("g:\\filestream.txt

1.1K100

半夜,F盘里传来了一阵响声···

在内存帮助下,阿飞总算来到了硬盘上。 第三回:数据何所依,硬盘话原理 突然,一个巨大东西从远处飞了过来,在阿飞头顶不远处地方快速掠过,吓得阿飞下意识一闪。 阿飞来不及看清,那东西已经远去。...而脚下方向,阿飞发现了无数小颗粒依次排列着,由近及远,望不到头,有点像内存中排列整齐电容单元,仔细看去却又完全不同。 ? “这些小颗粒是什么东西?”,阿小声嘀咕着。...图片来源:B站UP主——硬件茶谈 阿飞恍然大悟,“原来是这样,难怪以前把硬盘又叫磁盘”,又接着问道:“那为什么不是左右,而是上下呢?”...你说数据读取过程听起来有点像留声机把唱片上纹路转变成声音过程”,阿飞说到。 “唉,你这理解不错,就是那么个意思” “读我知道了,那如何写入数据呢?”,阿飞追问到。...“这硬盘容量虽大,但上面的存储位置都是经过统一编址,想找到你轻而易举。” “哦,具体怎么实现?” ?

57720

4.3.4 磁盘组织与管理

一、在磁盘上进行一次读写操作需要哪几部分时间?其中哪部分时间最长? 在磁盘上进行一次读写操作花费时间由寻道时间,延迟时间和传输时间决定。其中寻道时间是将磁头移动到指定磁道所需要时间。...延迟时间是磁头定位到某个磁道扇区(块号)所需要时间,传输时间是从磁盘读出或向磁盘写入数据所经历时间。一般来说,寻道时间因为要移动臂,所以占用时间最长。...二、存储一个文件时,当一个磁道存不下时,剩下部分是存在同一个盘面的不同磁道好,还是存在同一个柱面的不同盘面好? 寻道时间对于一次磁盘访问影响是最大,如果存在同一个盘面的不同磁道,那么臂必要移动。...这样会大大增加文件访问时间,而存在同一个柱面的不同盘面就不需要移动磁道,所以一般情况下存在同一柱面的不同盘面更好。...(3)传输时间:从磁盘读出或向磁盘写入数据所经历时间。 (4)启动时间:(一般忽略):控制器启动时间。

53820

Java学习笔记——IO流

2.2 分类 按操作数据单位不同分为:字节流 (以byte为单位,8 bit),字符流 (以char为单位,16 bit) 按数据流流向不同分为:输入流,输出流 按流角色不同分为:节点流,处理流...// 1.创建一个File对象,表明要写入文件位置。...显示定义serialVersionUID用途: 希望类不同版本对序列化兼容,因此需确保类不同版本具有相同serialVersionUID 不希望类不同版本对序列化兼容,因此需确保类不同版本具有不同...既可以充当一个输入流,又可以充当一个输出流 支持从任意位置读取、写入(插入) 创建 RandomAccessFile 类实例需要指定一个 mode 参数,该参数指定 RandomAccessFile...) 6 疑问 为什么先关输出流,再关输入流?

26430

SpringMVC源码分析:POST请求中文件处理

就是POST文件对应对象,调用file.transferTo方法即可将上传文件创建到业务所需位置; 三个疑问 虽然业务代码简单,以上几步即可完成对上传文件接收和处理,但是有几个疑问想要弄清楚:...为什么要配置名为multipartResolverbean; 为什么要依赖apachecommons-fileupload库; 从客户端POST到Controller中file.transferTo...,如果超过了threshold,就改为基于文件FileOutputStream对象,后续再执行getStream().write(b)时候,就不再写入到内存,而是写入到文件了; 5....内存数据; 至此,第三个疑问也解开了:上传文件如果小于指定阈值,就会被保存在内存中,否则就存在磁盘上,留给业务代码用,业务代码在使用时通过CommonsMultipartFile对象来操作; 似乎又有一个疑问了...:这些临时文件存在内存或者磁盘上,什么时候清理呢,不清理岂不是越来越多?

1.5K30

数据存储趣事

为什么像物理和化学这样基础学科如此重要呢?这篇文章或许可以给出一些答案。 随着更新、更好、更快存储介质到来,一个字节数据能够以多种不同方式进行存储。...一个典型硬盘驱动器包含一个或多个硬盘,硬盘上涂有一层由微小磁性颗粒组成敏薄膜。当磁头在旋转盘上方飞行时,数据就会被记录下来,就像电唱机和唱片一样,只不过那些场景下磁头与唱片有物理接触。...像 LMR 一样,PMR 基本限制是基于写入数据位热稳定性,以及需要有足够信噪比来读取信息。...热辅助磁记录 HAMR 也是一种能量辅助存储技术,利用激光发热帮助磁盘表面写入数据,从而大大增加了硬盘等磁性设备上存储数据量。热量使得磁盘上数据位之间距离更近,从而提高了数据密度和容量。...在写入数据之前,一个200毫瓦激光器把该区域一小部分快速加热到750华氏度(400摄氏度) ,同时不干扰或损坏磁盘上其余数据。加热、写入数据和冷却过程必须在一纳秒内完成。

89420

带你了解Java序列化(Serializable)与反序列化

以下是一些使用序列化示例: -以面向对象方式将数据存储到磁盘上文件,例如,Redis存储Student对象列表。 -将程序状态保存在磁盘上,例如,保存游戏状态。...可序列化 是一个标记接口(不包含任何方法),该接口告诉Java虚拟机(JVM)该类对象已准备好写入持久性存储或通过网络进行读取。 默认情况下,JVM负责编写和读取可序列化对象过程。...序列化/反序列化功能通过对象流类以下两种方法公开: ObjectOutputStream。writeObject(Object):将可序列化对象写入输出流。...如果正在读取对象serialVersionUID与类中指定序列号不同,则JVM抛出InvalidClassException。...-您程序无法反序列化先前编写Student对象,因为那里serialVersionUID不同。JVM抛出InvalidClassException。

1.6K30

JAVA之IO流

多级目录 返回当前文件子集 流分类 文件字节输入流FileInputStream ----将文件中数据读取出来 文件字节输出流FileOutputStream---将数据写入文件中 文件字节输入输出流复制图片案例...注意:如果向一个.txt里面写入数据,那么默认会覆盖掉里面原来数据,即删除掉原有数据,来写入新数据,而不是追加写入 转换流 注意:在转换字符流时候,设置字符集编码要与读取文件数据编码格式一致...=-1) { //第一个参数: 缓冲数据数组 第二个参数:从数组哪个位置开始转化字符串 第三个参数:总共转化几个字节...—将数据写入文件中 //指定向dhy.txt里面输出数据 //如果当前文件夹下面没有对应.txt,那么会帮我们创建出来一个 FileOutputStream...(StandardCharsets.UTF_8));//把数据写到内存中,这里是以字节方式写入 out.flush();//把内存中数据刷写到硬盘上 out.close

39220

JDK核心JAVA源码解析(4) - 堆外内存、零拷贝、DirectByteBuffer以及针对于NIO中FileChannel思考

原来在学JAVA时,那些JAVA入门书籍会告诉你一些规律还有法则,但是用时候我们一般很难想起来,因为我们用少并且不知道为什么。知其所以然方能印象深刻并学以致用。...面向块处理方式有些不同,数据是先被 读/写到buffer中,根据需要你可以控制读取什么位置数据。...FileChannelforce api说明 FileChannelforce方法: FileChannel.force()方法将通道里尚未写入磁盘数据强制写到磁盘上。...出于性能方面的考虑,操作系统会将数据缓存在内存中,所以无法保证写入到FileChannel里数据一定会即时写到磁盘上。要保证这一点,需要调用force()方法。...如果不用DirectByteBuffer而是用HeapByteBuffer,如果在调用系统调用时,发生了GC,导致HeapByteBuffer内存位置发生了变化,但是内核态并不能感知到这个变化导致系统调用读取或者写入错误数据

90130

Java - 从文件压缩聊一聊IO一二事

public static String COMPRESS_FILE_PATH = "D:/test/1.pdf"; //zip压缩包所存放位置 public static...---- Version 5 : MMAP NIO中新出另一个特性就是内存映射文件,内存映射文件为什么速度快呢?其实是在内存中开辟了一段直接缓冲区,与数据直接作交互。...首先需要明确一点是: 应用程序是都属于用户态 。 那么如果应用程序需要访问核心资源怎么办呢? 那就需要调用内核中所暴露出接口用以调用,称之为系统调用。比如需要访问磁盘上文件。...---- 比较 那既然直接缓冲区性能更高、效率更快,为什么还要存在两种缓冲区呢?因为直接缓冲区也存在着一些缺点: (1)不安全 (2)消耗更多,因为它不是在JVM中直接开辟空间。...(3)数据写入物理内存缓冲区中,程序就丧失了对这些数据管理,即什么时候这些数据被最终写入从磁盘只能由操作系统来决定,应用程序无法再干涉。

38420

【Java】基础41:什么叫IO流?

2.output O指output:输出意思,这是输出流。 意思是将内存中数据输出到硬盘上,也就是写入文件。 用一句话记忆就是:输入到内存(读取硬盘),从内存输出(写入硬盘)。...举一个例子: 我们在记事本上写东西,写完后保存,保存过程就是写入文件过程。 不保存:数据是在内存里面,退出后数据会消失; 保存:数据会被写到硬盘上,退出后数据也会保存。...所以①操作会在文件里写入abc。 ②write(byte[] b)方法 这是先写一个byte数组,在写入文件。 也是按照ASCII码表编码。...①直接输入换行符 不同操作系统有着不同换行符 Windows 系统识别的换行符:\r\n Unix 系统识别的换行符:\n MacOs/Linux系统识别的换行符:\r ②System方法输入换行符...System.lineSeparator():该方法会根据系统不同而输入不同换行符。

50110

Raid0、 Raid1、 Raid5、 Raid10原理、特点、性能区别

例如,总共有N块磁盘,那么会将要写入数据分成N份,并发写入到N块磁盘中,同时还将数据校验码信息也写入到这N块磁盘中(数据与对应校验码信息必须得分开存储在不同盘上)。...为什么RAID6这么牛呢,因为RAID6在RAID5基础上再次改进,引入了双重校验概念。...Logical Drive:逻辑驱动器 阵列中虚拟驱动器,它可以占用一个以上物理磁盘。逻辑驱动器把阵列或跨越阵列中磁盘分割成了连续存储空间,而这些存储空间分布在阵列中所有 盘上。...如果指定128KB条带将需要8MB内存。 Striping:条带化 条带化是把连续数据分割成相同大小数据块,把每段数据分别写入到阵列中不同盘上方法。...Write policy:写入策略   当处理器向磁盘上写入数据时候,数据先被写入高速缓存中,并认为处理器有可能马上再次读取它。

38.9K33

java使用nio读写文件

虚拟存储器三大能力: ①将主存看成是一个存储在磁盘上地址空间高速缓存。 ②为每个进程提供了一个一致地址空间。 ③保护每个进程地址空间不被其他进程破坏。...内核将数据从内核缓冲区复制到用户进程发起read()调用时指定用户缓冲区。 从上图可以看出:磁盘中数据是先读取到内核缓冲区中。然后再从内核缓冲区复制到用户缓冲区。为什么会这样呢?...用户缓冲区按页对齐,会提高IO效率—这也是为什么在JAVA中new 一个字节数组时,指定大小为2倍数(4096)原因吧。 四,JAVA中IO,本质上是把数据移进或者移出缓冲区。...当发起一个read()系统调用时,根据待读取数据位置生成一个虚拟地址(用户进程使用是虚拟地址),由MMU转换成物理地址,若内核中没有相应数据,产生一个缺页请求,内核负责页面调入从而将数据从磁盘读取到内核缓冲区映射物理内存中...非直接缓存:建立在JAVA堆上缓存,受JVM管理,相当于用户缓冲区。 根据上面第三点,将直接缓存中数据写入通道速度要快于非直接缓存。

90030

Java基础入门笔记08——文件流,IO流,FileIputStream类,FileOutputStream类,缓冲流,转换流,标准输入输出流,打印流,数据流,对象流,随机存储流

两者不同之处,在于描述目录路径时,所采用参考基准点不同。 **绝对路径:**直接指明文件在硬盘上真正存在具体位置或者是以Web站点根目录为参考完整路径。...**相对路径:**舍去磁盘盘符、计算机名等信息,以引用文件网页所在文件夹位置为参考,建立出基准根目录。当保存于不同目录网页引用同一个文件时,所使用相对路径不同。...——getPath() // (获取是你创建文件对象时我们在程序中写入路径,可能是绝对,可能是相对) System.out.println(f.getPath());...,读也就只能读Double in.close(); } } 对象流 把对象保存到硬盘上(对象持久化)和对象网络传输,这两件事引出了对象输入输出流。...,会覆盖掉与写入内容等长度原内容 ---- 小结: 流是用来处理数据 处理时要明确数据源(是从文件来,还是键盘输入)和数据目的地(送到文件,还是显示器,还是其他设备) 发布者:全栈程序员栈长,转载请注明出处

1.5K40
领券