今天发现了一段代码,就扫描了下,感觉应该挺简单的,但是结果却让我和失望,感觉有的本质的东西还是没有掌握,下为代码: static void Main(string[] args)
{
//写入数字 string filePath;
Console.WriteLine("请输入需要创建的二进制文件路径(包括文件名)");
filePath = Console.ReadLine(); FileStream fileStream = new FileStream(filePath, FileMode.Create);
BinaryWriter writer = new BinaryWriter(fileStream); for (int index = 0; index < 20; index++)
{
writer.Write(index);
} Console.WriteLine("写入完毕");
writer.Close();
fileStream.Close();
}
我输入的测试用例为 F:test.txt;下面的代码是对刚刚写的文件进行读操作:
static void Main(string[] args)
{
//读入数据
Console.WriteLine("请输入文件名:");
string filePath = Console.ReadLine();
if (!File.Exists(filePath))
{
Console.WriteLine("文件不存在。");
}
else
{
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(fileStream);
try
{
while (true)
{
Console.WriteLine(reader.ReadInt16());
}
}
catch (EndOfStreamException)
{
Console.WriteLine("已经到文件尾部了");
}
finally
{
reader.Close();
fileStream.Close();
Console.ReadKey();
}
按照我的猜想,答案应该为:0 0 0 1 0 2 0 3....0 19
但是结果很吃惊:
可能关键字不对吧,总是找不到相关的资料,所以来坛子里问问。
{
//写入数字 string filePath;
Console.WriteLine("请输入需要创建的二进制文件路径(包括文件名)");
filePath = Console.ReadLine(); FileStream fileStream = new FileStream(filePath, FileMode.Create);
BinaryWriter writer = new BinaryWriter(fileStream); for (int index = 0; index < 20; index++)
{
writer.Write(index);
} Console.WriteLine("写入完毕");
writer.Close();
fileStream.Close();
}
我输入的测试用例为 F:test.txt;下面的代码是对刚刚写的文件进行读操作:
static void Main(string[] args)
{
//读入数据
Console.WriteLine("请输入文件名:");
string filePath = Console.ReadLine();
if (!File.Exists(filePath))
{
Console.WriteLine("文件不存在。");
}
else
{
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(fileStream);
try
{
while (true)
{
Console.WriteLine(reader.ReadInt16());
}
}
catch (EndOfStreamException)
{
Console.WriteLine("已经到文件尾部了");
}
finally
{
reader.Close();
fileStream.Close();
Console.ReadKey();
}
按照我的猜想,答案应该为:0 0 0 1 0 2 0 3....0 19
但是结果很吃惊:
可能关键字不对吧,总是找不到相关的资料,所以来坛子里问问。
还望请教。
编码器可以使用 Big-Endian 字节顺序(从最高有效字节开始),也可以使用 Little-Endian 字节顺序(从最低有效字节开始)。
例如,大写拉丁字母 A(码位为 U+0041)的序列化结果(十六进制)如下所示:
Big-endian 字节顺序:00 00 00 41
Little-endian 字节顺序:41 00 00 00
通常,使用本机字节顺序存储 Unicode 字符的效率更高。
例如,在 Little-endian 平台(如 Intel 计算机)上最好使用 Little-endian 字节顺序。
或者, UnicodeEncoding 对象提供一个前导码(即一个字节数组),可以将它作为编码过程中所产生的字节序列的前缀。
例如int32 i=1 ,占4位,在内存中表示为 01 00 00 00
使用blockcopy转换为int16[2],则第一个元素为 01 00,第二个元素为 00 00
输出则变为1,0
参考资料:http://baike.baidu.com/view/2194385.htm
http://my.oschina.net/u/147624/blog/32460http://hi.baidu.com/liyunfeng6666/item/cb676eac0d86a436030a4ddb