当前位置: 首页 > 知识库问答 >
问题:

在android中以二进制文件的形式读写FloatBuffer

孙承弼
2023-03-14

我在玩OpenGL ES2和浮动缓冲区。实际上,我试图将处理顶点数据的FloatBuffer保存到一个二进制文件中。它似乎起作用了,但在读取浮点并将它们一起放回浮点缓冲区后,对象就被搞乱了。

为了从缓冲区保存浮点数据,我使用以下代码:

for(int i = 0; i < bufferSize; i++)
 outStream.writeFloat(floatBuffer.get(i));

阅读:

for(int i = 0; i < bufferSize; i++)
  if(inStream.available() != 0)
    tmpFloat[i] = inStream.readFloat();

FloatBuffers的创建方式如下:

FloatBuffer VertexBuffer = ByteBuffer.allocateDirect(VertexFloatArray.length * mBytesPerFloat).order(ByteOrder.nativeOrder()).asFloatBuffer();
VertexBuffer.put(VertexFloatArray).position(0);

有人知道为什么会这样吗?

更新:我已经比较了写入和读取的数据,它们是相等的。问题仍然存在,这只是更令人困惑。

共有1个答案

松德曜
2023-03-14

好吧,我没有解决这个问题,但我没有将vertexbuffer写入文件,而是尝试编写一个打包缓冲区(包含顶点、纹理坐标、法线等),结果工作得很好。我不明白为什么这可以工作,而一个单一的缓冲区却不行,但出于我的需要,这个问题得到了回答。

 类似资料:
  • 主要内容:字符读取函数 fgetc,字符写入函数 fputc在C语言中,读写文件比较灵活,既可以每次读写一个字符,也可以读写一个字符串,甚至是任意字节的数据(数据块)。本节介绍以字符形式读写文件。 以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件中写入一个字符。主要使用两个函数,分别是 fgetc() 和 fputc()。 字符读取函数 fgetc fgetc 是 file get char 的缩写,意思是从指定的文件中读取一个字符。fget

  • 问题内容: 我目前正在使用HTML5 File API,并且需要获取二进制文件数据。 的和方法可以正常使用,但返回的数据与相同。 我需要二进制数据,但是我正在获取文本字符串。我想念什么吗? 问题答案: 请注意2018年 :已过时。对于以前曾使用过的用例,最近这些天将使用(或在某些情况下为)。 表示必须将数据表示为 二进制字符串 ,其中: …每个字节都由[0..255]范围内的整数表示。 JavaS

  • fgets() 有局限性,每次最多只能从文件中读取一行内容,因为 fgets() 遇到换行符就结束读取。如果希望读取多行内容,需要使用 fread() 函数;相应地写入函数为 fwrite()。 对于 Windows 系统,使用 fread() 和 fwrite() 时应该以二进制的形式打开文件,具体原因我们已在《 文本文件和二进制文件到底有什么区别》一文中进行了说明。 fread() 函数用来从

  • 主要内容:读字符串函数 fgets,写字符串函数 fputsfgetc() 和 fputc() 函数每次只能读写一个字符,速度较慢;实际开发中往往是每次读写一个字符串或者一个数据块,这样能明显提高效率。 读字符串函数 fgets fgets() 函数用来从指定的文件中读取一个字符串,并保存到字符数组中,它的用法为: str 为字符数组,n 为要读取的字符数目,fp 为文件 指针。 返回值:读取成功时返回字符数组首地址,也即 str;读取失败时返回 NULL

  • 本文向大家介绍jscript读写二进制文件的方法,包括了jscript读写二进制文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jscript读写二进制文件的方法。分享给大家供大家参考。具体实现方法如下: 用法示例如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • Python 不仅支持文本文件的读写,也支持二进制文件的读写,比如图片,声音文件等。 读取二进制文件 读取二进制文件使用 ‘rb’ 模式。 这里以图片为例: with open('test.png', 'rb') as f: image_data = f.read() # image_data 是字节字符串格式的,而不是文本字符串 这里需要注意的是,在读取二进制数据时,返回的数据是字