当前位置:网站首页 > 数据科学与大数据 > 正文

ifstream读取一行数据(ifstream.read())



Java中文件读写,我们如果是从J2SE学起的都晓得InputStream,OutputStream流式读写,以及随机读写RandomAccessFile。但是从Java1.4后新增了Java NIO包,里面包含了

一个平时我们不太用的类ByteBuffer字节缓冲区来进行文件读写,说到字节缓冲区它又分为两种方式,一种是非直接缓冲区读写,另一种是直接缓冲区读写,还有一种MappedByteBuffer内存映射方式进行读写。

现在我们来说说这几种的区别:

1.InputStream流式文件读写,实际上是调用操作系统的read()和write()来完成文件的读写,并非直接对文件操作。

2.随机读写实际上是继承了DataInputStream流,它可以对java基础类型进行操作、而且是即可读取、也可以写入,这里的随机并不是不可控制、不可预测的去访问文件、而是可以通过指针的形式定位到具体的位置——“文件指针”、具体使用“文件指针”的方法:调用此流的seek(long n)方法来设置位置。

3.非直接缓冲区:使用缓冲区来进行文件读写实际上是减少了系统调用次数,可以预读更多的字节到自己维护的字节缓冲区中。

4.直接缓冲区:又称为堆外内存,属于Native堆,不属于JVM堆,是由C语言中的malloc()分配的内存。所以在某些场景中可以提高性能。当然每一次Full GC时,它的内存也会被JVM回收。

5.内存映射:它也属于堆外内存并且是直接缓冲区的一种,但是它相比于DirectMemory来说,它是由Java进程直接建立起来的某一段虚拟地址空间和文件对象的关联映射关系。所以内存映射文件的区域并不在JVM GC的回收范围内,因为它本身就不属于堆区,Java中使用((DirectBuffer)byteBuffer).cleaner().clean()来回收。

以下写出后四种的例子:

6.比较下DirectBuffer和MappedByteBuffer:

前者的文件复制原理是:

FileChannel inChannel = new FileInputStream(srcFile).getChannel();

FileChannel outChannel = new FileOutputStream(dstFile).getChannel();

//接下来就是开辟一段操作系统内存ByteBuffer,然后inChannel.read(byteBuffer);

outChannel.write(byteBuffer);//写入通道最终写入磁盘

然而内存映射就省去了操作系统内存缓冲这样的操作,而是将目地物理存储直接作为虚拟内存

那么也就是将outChannel.map(MapMode.READ_WRITE,position,copyFileSize);这段意思就是将输出通道直接作为一段虚拟内存了,那么也就是只需要让

inChannel.read(mappedByteBuffer);也就是只需要让源文件读到虚拟内存中,实际上也就是直接的写入到了目地物理存储了。

7.什么是Buffer:

首先,buffer就是我们常说的块,而它本质上就是一个字节数组,相比于流式一个字节一个字节的读写,块读写减少了读写次数。

下面我需要再介绍一种多线程随机读写,当然对于熟悉多线程的Coder来说太简单不过了。

这里再解释一遍,我们使用的实现Runnable方式来实现多线程,而不是继承Thread,其原因就是使用前者可以使线程间共享内存变量。

到此这篇ifstream读取一行数据(ifstream.read())的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • cmip6模式评估(cmip6数据使用方法)2026-03-05 08:09:08
  • 数据分析师一般一个月多少钱(数据分析师一般一个月多少钱?就业前景怎么样)2026-03-05 08:09:08
  • 小米手机数据迁移微信记录还在吗安全吗(小米手机数据迁移微信记录还在吗安全吗知乎)2026-03-05 08:09:08
  • 如何安装达梦数据库(安装达梦数据库环境要求)2026-03-05 08:09:08
  • 学术数据库官网下载(学术数据库官网下载安装)2026-03-05 08:09:08
  • cmip6数据处理方法(ipce数据处理)2026-03-05 08:09:08
  • 自动驾驶数据处理项目(自动驾驶数据处理项目有哪些)2026-03-05 08:09:08
  • st7735r数据(st7703ic资料)2026-03-05 08:09:08
  • 数据库增删改查面试题(数据库增删改查语句基础例题)2026-03-05 08:09:08
  • 数据库增删改查功能称为(数据库增删改查怎么实现的)2026-03-05 08:09:08
  • 全屏图片