看到一段代码如下
//接收头一批数据
var count = socket.Receive(receiveBufferBytes);
//转化成string
var getString = Encoding.Default.GetString(receiveBufferBytes);
//创建文件流
FileStream fs = new FileStream(@"d:\\Test.html", FileMode.OpenOrCreate);
//创建缓存流
BufferedStream bs = new BufferedStream(fs);
using (fs)
{
using (bs)
{
byte[] finalContent = Encoding.Default.GetBytes(getString.ToCharArray());
//将头一批数据写入本地硬盘
bs.Write(finalContent, 0, finalContent.Length);
//循环通过socket接收数据
while (count > 0)
{
count = socket.Receive(receiveBufferBytes, receiveBufferBytes.Length, SocketFlags.None);
//直接将获取到的byte数据写入本地硬盘
bs.Write(receiveBufferBytes, 0, receiveBufferBytes.Length);
Console.WriteLine(Encoding.Default.GetString(receiveBufferBytes));
}
bs.Flush();
fs.Flush();
bs.Close();
fs.Close();
}
}我的疑问是
为什么finalContent 不是直接Copy receiveBufferBytes 的count字节,而要使用Encoding进行两次转换呢?
//接收头一批数据
var count = socket.Receive(receiveBufferBytes);
//转化成string
var getString = Encoding.Default.GetString(receiveBufferBytes);
//创建文件流
FileStream fs = new FileStream(@"d:\\Test.html", FileMode.OpenOrCreate);
//创建缓存流
BufferedStream bs = new BufferedStream(fs);
using (fs)
{
using (bs)
{
byte[] finalContent = Encoding.Default.GetBytes(getString.ToCharArray());
//将头一批数据写入本地硬盘
bs.Write(finalContent, 0, finalContent.Length);
//循环通过socket接收数据
while (count > 0)
{
count = socket.Receive(receiveBufferBytes, receiveBufferBytes.Length, SocketFlags.None);
//直接将获取到的byte数据写入本地硬盘
bs.Write(receiveBufferBytes, 0, receiveBufferBytes.Length);
Console.WriteLine(Encoding.Default.GetString(receiveBufferBytes));
}
bs.Flush();
fs.Flush();
bs.Close();
fs.Close();
}
}我的疑问是
为什么finalContent 不是直接Copy receiveBufferBytes 的count字节,而要使用Encoding进行两次转换呢?
byte[] buf = new byte[count];
Array.copy(receiveBufferBytes,buf,count);
buf 和上面的
finalContent
应该是一样的
byte[] receiveBufferBytes = new byte[4096]; var count = socket.Receive(receiveBufferBytes);
//转化成string
var getString = Encoding.Default.GetString(receiveBufferBytes);byte[] finalContent = Encoding.Default.GetBytes(getString.ToCharArray());这是他的办法
和
byte[] buf = new byte[count];
Array.copy(receiveBufferBytes,buf,count);
byte[] finalContent = buf;
难道接不一样?
给连接过去看代码可能舒服些
http://www.cnblogs.com/JimmyZheng/archive/2012/04/25/2470277.html
直接拉倒最下面的例子