我正在尝试使用包含大量浮点/整数值的RandomAccessFile
和FileChannel
读取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
我在for
中获得的值是:
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
任何想法,建议我在这里缺少什么?
答案 0 :(得分:5)
它是一个文本文件,而不是随机访问文件。你应该用BufferedReader
阅读。它有readLine()
返回一个字符串,然后你就可以使用Double.valueOf(String)
。
答案 1 :(得分:1)
再次使用Android-Developer,我看到你尝试使用二进制文件方法......要做到这一点你必须转换你的数据
创建一个 new Java-Project并使用原始方法从xml / text-file加载值并将其转换为浮点数...(是的,这需要一些时间然后,它提供了有效的数据...)一旦你的应用程序存储中的数据你的浮动你的浮动到一个名为floats.bin的文件(使用FileWriter)。
然后将文件floats.bin复制到Android项目中并尝试使用上面的代码加载它(在我看来看起来不错)......
(指Android fastest way of reading big arrays of variables) 在你的问题上睡一晚后,我想你可以
要么在展示模型之前分散用户的注意力并加载数据......
或者您可以在加载时显示模型 - 让用户看到您的进度并看到模型每秒都在增长....
或者您可以将数据拆分为从粗到细的单独块并首先加载粗数据并显示它 - 然后您将更精细的数据加载到背景中并将其逐个添加到模型中。