.net中的异常和异常处理用法分析
来源: 阅读:639 次 日期:2015-01-21 13:56:03
温馨提示: 小编为您整理了“.net中的异常和异常处理用法分析”,方便广大网友查阅!

本文实例讲述了.net中的io操作之文件流用法。分享给大家供大家参考。具体分析如下:

读操作

复制代码 代码如下://1.创建文件流

filestream fsread =new filestream(1.txt,filemode.open);

//2.创建缓冲区,正常情况下,是不会直接等于文件大小的。这里只有读,所以就这么干了。

byte[] bytes =new byte[fsread.length];

//3.开始读取, 返回值是读取到的长度。

int r =fsread.read(bytes,0,bytes.lenght);

//4.关闭释放流

fsread.close();

fsread.dispose();

写操作

复制代码 代码如下://1.创建写入的文件流

filestream fswrite fswrite =new filestream(@xxx,filemode.openorcreate);

//2.创建缓冲区

string msg =helloworld;

byte[] bytes =enconding.utf8.getbytes(msg);

//3.开始写入

fswrite.write(bytes,0,bytes.length);

//4.关闭

fswrite.close();

fswrite.dispose();

byte数组与string之间的转换

在文件流写入的时候,经常需要string 和 byte数组之间的转换。

这里简单的描述一下,这方面的做法。

1.string 到 byte[]数组。

复制代码 代码如下:string msg =helloworld;

//使用utf8编码

byte[] bytes =system.text.encoding.utf8.getbyte(msg);

//使用系统默认编码

byte[] bytes =system.text.encoding.default.getbyte(msg);

2.byte[]到string

复制代码 代码如下:string newmsg =system.text.encoding.utf8.getstring(bytes);

编码问题

为什么中文会乱码?

utf8 编码中,一个中文字符占用两个字节。

gbk 编码中,一个中文字符占用三个字节。

utf8 编码中,用两个字节保存一个汉字,如果你用gbk读取,按照三个字节一个字的格式去读。当然乱码了。反之也是一样的。

总结起来,无论是36码的鞋子,穿在50码的脚丫子上。还是36码的脚丫子,穿50码的鞋。看起来都不会很舒服。

所以,按照什么格式写入,就按照什么格式读取。才是正解。

ps:

1.utf8是国际标准。

2.gb2312 是国标编码,支持中文的。

3.gbk是对gb2312的扩展,支持繁体中文。

什么类可以dispose( )?

1.dispose()表示释放资源,.net中对dispose()有一个统一的约定或者叫描述。这个约定表现为一个接口。

或者说这个接口,是一个红头文件,红头文件中约定了如何释放资源。

所有实现了idisposable接口的类都可以释放,可以dispose();

那么类库中什么样的类会实现idisposable接口呢?

我的理解是这样的,一般仅占用托管堆中内存资源的类或对象。一般不需要dispose()。垃圾回收就搞定了。

但是对于文件句柄,网络端口号,数据库连接等,clr的垃圾回收机制是不管的。

所以一般这部分内容需要实现idisposable接口。

文件流操作的异常处理

复制代码 代码如下://只有把fs定义在这里,finally中才能引用得到。

filestream fs =null;

try

{

fs =new filestream(@文件路径,filemode.create);

byte[] bytes = encoding.default.getbytes(helloworld);

fs.write(bytes,0,byte.length);

}

finally

{

if(fs != null) //如果fs未赋值,那么直接dispose就会引发空指针异常。

{

fs.dispose();

}

}

简化上述的写法,虽然严谨但是稍微有点麻烦。microsoft提供了语法糖。

就是using的语法

复制代码 代码如下:using(某个可以释放资源的类)

{

操作

}

//1.操作执行完,会自动释放。

//2.using语句编译完成以后,会形成跟上面类似的代码。就是使用try finally。

streamwriter和streamreader

复制代码 代码如下://按行写入

streamwriter sw =new streamwriter(@target,true,encoding.getenconding(gb2312));

sw.writeline(helloworld);

//按行读取

streamreader sr =new streamreader(@source);

sr.readerline(); //每次返回一个字符串

希望本文所述对大家的.net程序设计有所帮助。

更多信息请查看IT技术专栏

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map