-1
我有一个大阵,我需要保存到磁盘下一个用户会话大整数的数组。我没有数据库或使用其中的选项。 当我将它们写入文本文件时,大量数据会占用更多空间吗? 什么是最好的方式来存储这个数组以备后用?BIGINT保存到文件
我有一个大阵,我需要保存到磁盘下一个用户会话大整数的数组。我没有数据库或使用其中的选项。 当我将它们写入文本文件时,大量数据会占用更多空间吗? 什么是最好的方式来存储这个数组以备后用?BIGINT保存到文件
我只是用一个普通的文本文件去找它,这个整数将占用尽可能多的空间作为它的字符串表示,所以2759275918572192759185721作为一个大整数将占用与2759275918572192759185721相同的空间作为一个字符串(它不是那么多)。
当从文件中读取它们,你只需再次解析。
重要:没有错误在此代码处理!你abosolutely必须添加try-catch-finally到ctahc IOException和NumberformatException!
File file = new File("C:\\Users\\Phiwa\\Desktop\\test.txt");
if(!file.exists())
file.createNewFile();
FileWriter fw = new FileWriter(file);
BigInteger bint1 = new BigInteger("999999999999999999");
fw.write(bint1.toString());
fw.flush();
fw.close();
// BigInteger has been written to file
// Read it from file again
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String str = br.readLine();
br.close();
BigInteger bint2 = BigInteger.valueOf(Long.parseLong(str));
System.out.println(bint2);
这个工程,你已经尝试过吗?
事情是有点不同的,如果你有在格式0x999999999999999整数,在这种情况下,你可以使用
BigInteger bint2 = new BigInteger(str.replace("0x", ""), 16);
哇感谢彻底反应。如果将数字保存到文本文件时,字符串就像字符串那样,将bigint转换为十六进制数,甚至更大的基数来保存存储空间会不会更好? – Geremy 2014-12-06 11:01:45
当然,随意将其转换并使用六角形基座(应足够大)。在这种情况下,你可以使用我的最后一行将它读回到内存中,但即使我更喜欢十六进制,它也适用于所有基础。 – Phiwa 2014-12-06 11:06:08
那么你会推荐Hex基地作为最佳做法吗?或者有没有一种转换能够在磁盘空间方面更高效? – Geremy 2014-12-06 11:10:07