永发信息网

C#中FileStream.Read方法的buffer大小不一样读取结果不一样??

答案:1  悬赏:30  手机版
解决时间 2021-04-01 09:22
C#中FileStream.Read方法的buffer大小不一样读取结果不一样??
最佳答案
如果不知道原文件的大小,可以这样:
FileStream fs2 = new FileStream("2.txt", FileMode.Create);
byte[] buffer = new byte[4096];//这里的大小可以设置为ReceiveBufferSize
while ((count = fs.Read(buffer, 0, buffer.Length)) != 0)
{
buffer.Initialize();//将buffer初始化,避免出现后半部不更新的情况。
string str = System.Text.Encoding.ASCII.GetString(buffer);
str = str.TrimEnd('\0');//将后面冗余的'\0'去掉
richTextBox1.Text += str;

fs2.Write(buffer,0, str.Length);//注意这里取得是str的长度而不是buffer的长度。
}
fs2.Close();
——————————————
简单分析一下:
1.buffer长度较小,不会一次从fs中读取所有数据。那么在倒数第二次取完byte之后,最后一次可能会出现剩余的待取字节不足buffer长度的情况,buffer只有前半部分被更新,后面剩余了倒数第二次取得的字节。所以会有冗余的字节存在buffer里面,写出来的时候相应的冗余字节也被存到文件和richText里面了。

2.buffer长度很大,一次能从fs里取完所有字节。此时在richeText里面看到的是正常的。但由于buffer后面还有大量的空余字节,而且它们被初始化为“\0”,所以存在txt文件中会显示为空格。而且txt的文件大小也等同于buffer的大小而不是原文件的大小。

解决办法:
将buffer的大小设为fs字节流同样的大小。即:
FileStream fs = File.OpenRead("1.txt");
int count = 1;
FileStream fs2 = new FileStream("2.txt", FileMode.Create);
byte[] buffer = new byte[fs.Length];
就可以解决上述问题了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求共饮长江水的平民的战争全本。现在铁血上是
路基施工过程中软基换填(填土)属不属于隐蔽
咨询一下,在肇庆购买一台精密激光切割机要多
一列火车通过530米的桥需要40秒,以同样的速
打电玩就那么讨人厌吗?
最终幻想系列和塞尔达系列哪个影响力大
郑州贝克洛门窗地址电话
怎么在中央投诉在新疆托欠农民工工资
唐为2015开机界面怎么能成三星开机界面那
一套VC++试题,求高手作答,感谢
塔吊检验合格后再次顶升到一定高度,还需检验
求助:高铁转动车可以不出站换乘吗
能量刀锋移动电源如何?
苹果iOS11下载了百度输入法还是用不了特技字
230,00£是多少人民币?
推荐资讯
周五涨停,周三必有表示,怎么理解
自己刚从传销出来,家破人亡
美元指数、原油指数由谁控制
二手三星NP-330笔记本能卖多钱
我的手机拍照时拍完照片为什么变粉红色
I3-4130集显HD4400比笔记本独显GT520还差?
单选题Thenewsis________surprising.A.muchB
子曰:爱一个人需要什么理由,爱就是爱了
1040阳光工程一代老总每份新增份额是多少钱
金毛犬吃全价狗粮可以满足他的营养需要吗
手机支付宝提现到银行卡,要手续费吗
超市水电安装价格
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?