Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 映射缓冲区读取整数_Java_Buffer_Nio - Fatal编程技术网

Java 映射缓冲区读取整数

Java 映射缓冲区读取整数,java,buffer,nio,Java,Buffer,Nio,我有两个简单的函数来编写int并从映射文件中读取它,但其中一个函数似乎是错误的 导入java.io.File; 导入java.io.FileNotFoundException; 导入java.io.IOException; 导入java.io.RandomAccessFile; 导入java.nio.MappedByteBuffer; 导入java.nio.channels.FileChannel; 导入java.util.Random; 公共类Memorimappedfileinjava{ /

我有两个简单的函数来编写int并从映射文件中读取它,但其中一个函数似乎是错误的

导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入java.io.RandomAccessFile;
导入java.nio.MappedByteBuffer;
导入java.nio.channels.FileChannel;
导入java.util.Random;
公共类Memorimappedfileinjava{
//文件
文件;
//用于将文件内容连接到缓冲区的通道
文件通道;
//缓冲区
MappedByteBuffer缓冲区;
//缓冲区最大大小(字节)
最终整数缓冲区_MAX=32;
@抑制警告(“资源”)
MemoryMappedFileInJava(){
file=新文件(“file.txt”);
//创建用于写入和读取的通道
试一试{
通道=新的随机访问文件(文件,“rw”).getChannel();
}catch(filenotfounde异常){
e、 printStackTrace();
}
//将文件内容映射到缓冲区
试一试{
buffer=channel.map(FileChannel.MapMode.READ\u WRITE,0,buffer\u MAX);
}捕获(IOE异常){
e、 printStackTrace();
}
}
//从缓冲区读取值
int readInt(){
整数=0;
int c=buffer.getInt();
缓冲器位置(0);
而(c!='\0')
数字+=c;
返回号码;
}
//将消息发送到缓冲区
无效写入(整数){
缓冲器位置(0);
buffer.putInt(数字);
buffer.putChar('\0');
}
//关闭频道
void closeChannel(){
试一试{
channel.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
//让我们用随机数做一些测试
静态无效运行(){
随机r=新随机();
MemoryMappedFileInJava通信=新建MemoryMappedFileInJava();
整数=r.nextInt(5)+1;
通信、书写(编号);
String prefix=“缓冲区中的给定数字为-->”;
System.out.print(前缀+communication.readInt());
}
公共静态void main(字符串[]args)
{
run();
}
}
我用来运行此代码的完整代码也可以从这里编译和运行:


输出打印总是给出0,如果是在写函数或读函数中,我找不到哪里有问题。

我不理解
数字变量或
的原因,而
readInt
方法中的
循环。如果您只想从
缓冲区开始读取
int
,那么将
readInt
方法更改为以下方法就可以了:

    int readInt() {
        buffer.position(0);
        return buffer.getInt();
    }

我怀疑这段代码是否给了您任何东西,因为由于主要的语法和编译错误,它无法运行。请发布您正在编译和运行的实际代码。@MarcoR。添加了我用来运行此代码的完整代码链接:在SO中,您的问题必须完整。会员不会在互联网上查询你问题的细节;因此,编辑您的问题并将来源发布在此处。这个问题的任何非必要细节都可以在这里找到必要的细节后链接。@MarcoR。你是对的,我已经在我的问题帖子中更新了代码。去掉处理NUL字符的部分。它们不是必需的,其中一些没有任何意义。实际上,您甚至不需要这些方法:直接调用
getInt()
putInt()
。我不明白你为什么要计算
缓冲区。位置(0)
。真的只有一个号码吗?在文件的开头?注意:这些是二进制数,不应写入名为.txt的文件。