我有一個long
陣列。如何將這個數組寫入二進制文件? 問題是,如果我把它轉換成byte
陣列的一些值的變化。C#如何寫長型數組的二進制文件
陣列是這樣的:
long array = new long[160000];
給一些代碼段。
我有一個long
陣列。如何將這個數組寫入二進制文件? 問題是,如果我把它轉換成byte
陣列的一些值的變化。C#如何寫長型數組的二進制文件
陣列是這樣的:
long array = new long[160000];
給一些代碼段。
的BinaryFormatter的將是最容易的。
也值類型(我想這是你長的意思),序列化非常有效。
同意二進制格式化程序。 – 2009-12-08 10:14:25
var array = new[] { 1L, 2L, 3L };
using (var stream = new FileStream("test.bin", FileMode.Create, FileAccess.Write, FileShare.None))
using (var writer = new BinaryWriter(stream))
{
foreach (long item in array)
{
writer.Write(item);
}
}
這將是非常緩慢的,但它的工作:) – leppie 2009-12-08 09:44:43
@leppie,我同意你的看法。我已經執行了一些測量,並且按照您的建議使用'BinaryFormatter'執行得更好。 – 2009-12-08 15:06:18
值是如何變化的?一個long數組可以很快被複制到一個byte數組中,而不需要序列化。
static void Main(string[] args) {
System.Random random = new Random();
long[] arrayOriginal = new long[160000];
long[] arrayRead = null;
for (int i =0 ; i < arrayOriginal.Length; i++) {
arrayOriginal[i] = random.Next(int.MaxValue) * random.Next(int.MaxValue);
}
byte[] bytesOriginal = new byte[arrayOriginal.Length * sizeof(long)];
System.Buffer.BlockCopy(arrayOriginal, 0, bytesOriginal, 0, bytesOriginal.Length);
using (System.IO.MemoryStream stream = new System.IO.MemoryStream()) {
// write
stream.Write(bytesOriginal, 0, bytesOriginal.Length);
// reset
stream.Flush();
stream.Position = 0;
int expectedLength = 0;
checked {
expectedLength = (int)stream.Length;
}
// read
byte[] bytesRead = new byte[expectedLength];
if (expectedLength == stream.Read(bytesRead, 0, expectedLength)) {
arrayRead = new long[expectedLength/sizeof(long)];
Buffer.BlockCopy(bytesRead, 0, arrayRead, 0, expectedLength);
}
else {
// exception
}
// check
for (int i = 0; i < arrayOriginal.Length; i++) {
if (arrayOriginal[i] != arrayRead[i]) {
throw new System.Exception();
}
}
}
System.Console.WriteLine("Done");
System.Console.ReadKey();
}
你是什麼意思 「改變」? – 2009-12-08 10:19:04