java - Android ByteBuffer 到 float 转换返回错误值

标签 java android bytebuffer

我正在尝试使用RandomAccessFileFileChannel读取txt文件,其中包含大量浮点/整数值,但在使用ByteBuffer<的所有对话之后 我得到的结果与 txt 文件中的值不同。这是我的做法:

        RandomAccessFile mRandomFile = new RandomAccessFile(Environment.getExternalStorageDirectory() + "/Models/vertices.txt", "rw");
        FileChannel mInChannel = mRandomFile.getChannel();
        ByteBuffer mBuffer = ByteBuffer.allocate(181017 * 4);
        mBuffer.clear();

        mInChannel.read(mBuffer);

        mBuffer.rewind();
        FloatBuffer mFloatBUffer = mBuffer.asFloatBuffer();
        mFloatBUffer.get(VERTS);

        mInChannel.close();

        for (int i = 0; i < 20; i++) {
            Log.d("", "VALUE: " + VERTS[i]);
        }

txt 文件中的值以这种方式呈现(它们用新行分隔):

-36.122300
-6.356030
-46.876744
-36.122303
-7.448818
-46.876756
-36.122303
-7.448818
81.123221
-36.122300
-6.356030
81.123209
36.817676
-6.356030
-46.876779
36.817676
-7.448818
-46.876779
-36.122303
-7.448818

我在中得到的值是:

VALUE: 1.0187002E-11
VALUE: 2.5930944E-9
VALUE: 6.404289E-10
VALUE: 2.5957827E-6
VALUE: 2.6255839E-6
VALUE: 8.339467E-33
VALUE: 4.1885793E-11
VALUE: 1.0740952E-5
VALUE: 1.0187002E-11
VALUE: 2.5930944E-9
VALUE: 6.513428E-10
VALUE: 1.0383363E-5
VALUE: 4.3914857E-5
VALUE: 8.339467E-33
VALUE: 4.1885793E-11
VALUE: 1.0801023E-5
VALUE: 1.0187002E-11
VALUE: 2.5930944E-9
VALUE: 6.513428E-10
VALUE: 1.0383363E-5

我在这里缺少什么想法、建议吗?

最佳答案

它是一个文本文件,而不是随机访问文件。您应该使用 BufferedReader 来阅读。它有一个返回字符串的 readLine(),然后您可以使用 Double.valueOf(String)

这里有更多代码 How to use Buffered Reader in Java

关于java - Android ByteBuffer 到 float 转换返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25866078/

相关文章:

java - 防止子类添加方法

java - 如何配置 p6spy 将其输出重定向到文件中

java - 如何测量从 URL 下载的 PDF 的大小

java - 从 java 中的 ByteBuffer 获取字节数组

java - 是否有使用类似 Wiki 语法的 javadoc 替代品?

Android无法获取 token 来更改软键盘

android - Flutter 未检测到 Android SDK

java - Payload.getIssuee() 已弃用

java - 在 Java 中将 ByteBuffer 转换为 String

java - 如何设置文件 channel 位置