private Arraylist split(byte[] filebytes, int range)
{
}
如何如果範圍是100它 應該由100KB分裂filebytes並把這個入數組列表,直到在EOF拆分此filebytes由給定的範圍即。 我只有.NET Framework 1.1 ...提前致謝。分裂byte []數組
private Arraylist split(byte[] filebytes, int range)
{
}
如何如果範圍是100它 應該由100KB分裂filebytes並把這個入數組列表,直到在EOF拆分此filebytes由給定的範圍即。 我只有.NET Framework 1.1 ...提前致謝。分裂byte []數組
如果我正確地理解了這個問題,你想將現有數組切割成(最多)100k個元素的數組,並將這些數組放入數組列表中?
ArrayList Split(byte[] filebytes, int range)
{
range *= 1000;
int pos = 0;
int remaining;
ArrayList result = new ArrayList();
while ((remaining = filebytes.Length - pos) > 0)
{
byte[] block = new byte[Math.Min(remaining, range)];
Array.Copy(filebytes, pos, block, 0, block.Length);
result.Add(block);
pos += block.Length;
}
return result;
}
更改1000至1024年,如果這是你的意圖:)
我真的不能相信的理由,爲什麼你會想這樣做雖然。加載一個龐大的字節陣列和,然後分裂成塊是相當低效的,如果你可以在讀取你的數據時將它們分割成100k塊。
關於你的評論:發送整個文件到套接字應該比你想要的要簡單得多。我沒有辦法測試,但這應該在.NET 1.1中工作。
private void SendFileToSocket(string fileName)
{
Socket socket = new Socket(
AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
using (socket)
{
socket.Connect("server.domain.com", 12345);
using (NetworkStream networkStream = new NetworkStream(socket))
using (FileStream fileStream = File.OpenRead(fileName))
{
byte[] buffer = new byte[32768];
while (true)
{
int bytesRead = fileStream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
break;
networkStream.Write(buffer, 0, bytesRead);
}
}
}
}
緩衝區大小有點隨意,但它應該足夠大。
那麼,如果我正確地理解了這個,你想和ArrayList
的byte[]
大小100000?我無法爲你編寫代碼(目前沒有VS),但最有效的方法是創建新的數組對象,並使用Array.Copy()
將大數組中的數據複製到一堆較小的數組中。
Thorarin建議的想法是一個很好的解決方案。不過,我會對byte []塊的聲明做一些小改動。最好把的聲明放在以外的地方。據我所知,這對你的表現更好。你不會注意到很多(特別是不在filebytes數組的小版本中),但像FXCop這樣的軟件會警告你關於while/for結構中的聲明(至少據我所知)。因此,代碼是這樣的:
ArrayList Split(byte[] filebytes, int range)
{
range *= 1000;
int pos = 0;
int remaining;
ArrayList result = new ArrayList();
//Placed the declaration of block outside the while.
byte[] block = null;
while ((remaining = filebytes.Length - pos) > 0)
{
block = new byte[Math.Min(remaining, range)];
Array.Copy(filebytes, pos, block, 0, block.Length);
result.Add(block);
pos += block.Length;
}
return result;
}
有關詳細信息看:Declare variable inside or outside the [email protected]
你要複製的東西成contb,驗證它爲空後。您需要先分配數組。我失去了你想要達到的目標。閱讀,拆分,連接,寫?對我沒有意義。 – Thorarin 2009-08-05 06:44:55
正在使用套接字進行文件傳輸編...所有文件都非常lorge所以在這裏我必須拆分文件併發送到服務器。服務器ll 連接所有字節,最後寫一個文件,這是這個項目的目標....現在希望達到它。非常感謝。 – 2009-08-05 07:00:29