当前位置:首页 > 内存 > 正文

内存映射io不能访问io端口吗

  • 内存
  • 2024-08-11 14:56:56
  • 7208

一、想问一下io是什么?

io是输入输出。它分为输入输出设备和输入输出接口两部分。在POSIX兼容的系统中,例如Linux系统,IO操作可以通过多种方式实现,例如DIODirectIO、AIOAsynchronousIO、异步IO、MemoryMappedIO等。IO应用根据情况选择不同的IO方式。


io的作用

IO系统管理的主要对象是IO设备和相应的设备控制器。其主要功能是完成用户的I/O请求,提高I/O速率,提高设备利用率,并为高层操作提供便捷的接口。输入输出接口,又称输入输出接口,是信息处理系统与外界的连接。输入是系统接收的信号或数据,输出是系统发送的信号或数据。


二、io是什么意思输入/输出(I/O)分为两部分:I/O设备和I/O接口。在POSIX兼容的系统上,例如Linux系统,I/O操作可以通过多种方式进行,例如DIO(DirectI/O)、AIO(异步I/O)、内存-映射I/O(内存映射输入/输出)),ETC。不同的I/O方式有不同的实现方式和性能,在不同的应用中,可以根据情况选择不同的I/O方式。
输入输出流可以视为读字节或打包字节,即双向输出和放入,实现弱电线路联动控制系统与受控设备之间的通信。强电线路之间的传输和隔离,防止强电进入系统,保证与控制重要消防设备(如消防泵)线路控制屏相连的系统安全。、喷雾泵、风扇等)。只需一台机组即可控制大型消防设备的启停;通过附加结构,底座可以像探测器一样安装在墙壁上,并且可以在接线后、项目调试前将开关模块插入底座中。采用无源动触点或AC220V开关电压作为响应信号,易于设置和维护。工作时确认灯动作灯为红色,应答灯为绿色,动作灯常亮,应答灯常亮;IO输出口可连接继电器。AC250V/3A、DC30V/7A继电器触点负载以一组常开/常闭触点启动,以一组常开触点停止。
三、io和nio的文件读取方式的不同io也叫oldio,读取文件主要是通过流的方式,从磁盘上一个字符一个字符的读取,效率比较低。
nio改进了文件操作方式。通过块读取,读取的是整个块,所以读取到的不会是一个字符,而是一个块。将这些数据放入内存缓冲区。进行中。通过读取块来提高速度。(块操作、fileChannel)
内存映射,MappedByteBuffer,这个主要是通过内存映射,即利用虚拟内存(把文件的某一部分当作内存)来直接操作文件。对于一些需要存储在内存中的大文件,Block操作的文件,比如1G的文件
需要操作内存中的200M部分。读200M到物理内存会消耗更多的内存和CPU。最好直接虚拟化文件的那部分。直接内存操作。
下面是使用以上三种格式读取一个300M文件并写入另一个文件的测试:
treamCPU5.6%内存2.6McostTime:4.039S使用缓冲区字节:4kb
annelCPU1.3%内存2.6McostTime:3.359S使用缓冲区字节:0(transferTo方法)
ByteBufferCPU6.9%内存2.4McostTime:6.966S内存映射:300M
可见,读取大文件块是最好的;如果你想直接操作文件的大部分内容,比较适合MappedByteBuffer;如果读取非常小的内容,例如8B内容,inputStream可能是最好的。
代码如下,选择几个文件自己试一下。使用jdk自带的JConsole来观察。
publicclassTest{
publicstaticvoidmain(String[]args)throwsException{
Fileff=newFile("F:/workspace/pureMQ/src/mq/pure/file/");
File[]f=newFile[7];
File[]f_write=newFile[7];
(15000);
for(inti=0;i<7;i++){
f[i]=newFile("F:/workspace/pureMQ/src/mq/pure/file/1"+(i+1))+".jpg");
}
for(inti=0;i<7;i++){
f_write[i]=newFile("F:/workspace/pureMQ/src/mq/pure/file/"+i+".jpg");
if(!f_write[i].exists()){
f_write[i].createNewFile();
}
}
f[0]=ff;
longbegin=tTimeMillis();
intchoice=1;
对于(inti=0;i<7;i++){
开关(选择){
case1:
n("1");
InputStreamips=newFileInputStream(f[i]);
OutputStreamops=newFileOutputStream(f_write[i]);
byte[]b=newbyte[4096];
intindex;
while((index=(b))!=-1){
(b);
}
if(ips!=null){
();
}
if(ops!=null){
();
}
break;
case2:
n("2");
RandomAccessFileraf=newRandomAccessFile(f[i],"r");
RandomAccessFileraf_write=newRandomAccessFile(f_write[i],"rw");
FileChannelfc=nnel();
FileChannelfc_write=raf_nnel();
erTo(0,(),fc_write);
();
fc_();
();
raf_();
break;
case3:
n("3");
RandomAccessFileraf2=newRandomAccessFile(f[i],"r");
RandomAccessFileraf2_write=newRandomAccessFile(f_write[i],"rwd");
FileChannelfc2=nnel();
FileChannelfc2_write=raf2_nnel();
MappedByteBuffermbb=fc2_(_WRITE,0,());
ByteBufferbb=te(4096);
while((bb)!=-1){
();
(bb);
t();
}
();
();
fc2_();
();
raf2_();
break;
默认:
break;
}
}
longend=tTimeMillis();
n("alltimecost:"+(end-begin));
}
}