【问题标题】:More efficient way of transferring int from .txt to array将 int 从 .txt 传输到数组的更有效方法
【发布时间】:2015-01-08 19:02:58
【问题描述】:

所以我目前正在制作一个 2D 游戏,其中地图预先生成在 .txt 文件中,然后读取并加载到数组中。

数组存储在 World 类中(我使用的是 greenfoot),我这样做的方法是:(从之前声明并初始化地图为世界的大小,地图是完美的矩形)

Scanner scan = new Scanner ( new File("map.txt"));
for(int i = 0; i<map.length;i++)
{
   for( int j = 0;j<map[0].length; j++;)
   {
    map[i][j]=scan.NextInt();
   }
}

(异常被捕获并在之后关闭扫描仪) 我的地图目前是 600x5000,这种传输数据的方法似乎真的很慢。有什么办法可以加快速度或使用更有效的方法来做到这一点?

提前致谢!

【问题讨论】:

  • 您可以尝试让每 2 个字节(=每 2 个字符)代表一个地图块。所以你可以节省一些运行时间来检索地图
  • 在竞赛编码世界中,推荐使用BufferedReader而不是Scanner来读取数据,因为它更快。这在您的情况下也可能是有利的。
  • 如果您的游戏中不需要超过 256 个对象,甚至每个字节都是一个块
  • @AdamCherti 嗨,我会调查的。目前 1 个 int 代表 1 个块。我有一张 5000x600 块的地图 LOL。所以我肯定会有超过 256 个对象。
  • @anorton 非常感谢!我去看看

标签: java arrays int


【解决方案1】:

不要以文本格式存储数据,而是尝试使用旨在处理二进制数据的二进制格式。

如果您不想添加任何库,请尝试 java 序列化/反序列化,使用它您将能够存储完整数组并将其作为完整数组读取。

【讨论】:

  • 嘿,我在 12 年级的计算机科学中还没有学过这个。 =p 还有更简单的方法吗?
  • 这并不难。文件是表示字符的字节列表。所以 e 字母实际上是一个数字,例如 152。所以文件的每个字节都是小于 256 的数字,因为一个字节可以代表 0 到 255 之间的数字。这个数字代表地图块的“代码”。
  • 会快很多。否则,如果您选择扫描整数,那么这是您的选择,您将不得不等待地图加载并像其他所有游戏一样:显示“领先”屏幕
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多