C# 写入流的问题

TonyWu 2010-11-22 12:23:22
我手filestream new 了一个,然后再用 streamWriter写入一个数字,比如是5.然后保存成文件后,我发现文件前面多了一个0x30,0x35后面还有很长的空白,我也用了writer.BaseStream.Seek(0, SeekOrigin.Begin);这是怎么回事呀?
我用BinaryWriter 写,加了seek就行,但是我明明写的(short)5,写入文件后,成了0x05 0x00 本来应该是0x00 0x05的呀,这样读出来会有问题的,我也不大明白,请大家赐教............
...全文
170 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
TonyWu 2010-11-23
  • 打赏
  • 举报
回复
感谢大家的回答,我已经在网上找到解决方法了,具体就是,需要把一个short值存成一个byte[] 这样用BinaryWriter再去写入就没有问题了,写成文件后,我想用java去读,这样就可以了,在这里还是要谢谢大家
Ann725 2010-11-22
  • 打赏
  • 举报
回复
你可以这样子,先创建实例化文件流
然后在创建StreamWriter,然后在构造里面(文件流对象,encoding.default);
接下来应该都会把
phil999 2010-11-22
  • 打赏
  • 举报
回复
0x05 0x00 本来应该是0x00 0x05

不应假定short的字节序列,在不同OS上是不同的,BinaryWriter 和 BinaryReader 内部可能也会有些处理。

StreamWriter 是写文本的。文件头部可能有几个字节指示文件的编码。

tanrenzong1986 2010-11-22
  • 打赏
  • 举报
回复
在内存里,数字字段等是用十六进制存储的,单独一个5应该就是一个字节,即是0x300x35。0x表示是十六进制,30就是0,35即是5。至于为什么你显示的是0x050x00,是因为有高低位之分。即存储的是0x050x00,而输出时就要把调换为0x000x05。
Ann725 2010-11-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chinaweikedong 的回复:]
我用了Ann725的方法,可是还是不行呀,十六进制打开是这样的
30 35 05
我看了msdn上的,说BinaryWriter位置可能有变化 ,但是streamWriter前面多的这些东西是怎么来的呢?那写文件 用什么流呢?
[/Quote]
像你要处理文本字符串的话,读取跟写入,就用streamreader,streamwriter
Ann725 2010-11-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chinaweikedong 的回复:]
我用了Ann725的方法,可是还是不行呀,十六进制打开是这样的
30 35 05
我看了msdn上的,说BinaryWriter位置可能有变化 ,但是streamWriter前面多的这些东西是怎么来的呢?那写文件 用什么流呢?
[/Quote]

BinaryReader和BinaryWriter类是以二进制的格式处理基本数据,比如说bool,string,int等
还有你数据读写是用什么控件的,你不妨把代码贴出来看下
TonyWu 2010-11-22
  • 打赏
  • 举报
回复
我用了Ann725的方法,可是还是不行呀,十六进制打开是这样的
30 35 05
我看了msdn上的,说BinaryWriter位置可能有变化 ,但是streamWriter前面多的这些东西是怎么来的呢?那写文件 用什么流呢?

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧