转用C#,请教一个比较基础的问题

jywzzz 2011-01-07 10:23:02
我要从文件中读入一个ushort的数组,很大,一共有400多兆。

FileStream只能读入Byte型的,原来C++可以直接数组类型转换,但是C#不行。

我看到有用 B​u​f​f​e​r​.​B​l​o​c​k​C​o​p​y 方法来转换的,但是我的数据量很大,浪费内存,也慢。

所以想问下有什么直接转的方法,听说可以用unsafe的方法,但不知道怎么处理。

C#初学,求个较为详细的过程,谢谢。
...全文
144 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jywzzz 2011-01-07
  • 打赏
  • 举报
回复
多谢,我先试试,估计还是自己做个读取的API会好些。

每种语言均有优缺点,也没办法。
gomoku 2011-01-07
  • 打赏
  • 举报
回复
1. 同样用BlockCopy,不过使用一个小的buffer中转。这样浪费的内存就限于buffer的长度。

byte[] buffer = new byte[1024];
int offset = 0, read = 0;
while( (read = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
Buffer.BlockCopy(buffer, 0, data16, offset, read);
offset += read / sizeof(ushort);
}


2. 如果有特殊的要求,那你可以直接用API自己读写,甚至可以用内存映射。
jywzzz 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gomoku 的回复:]

你在C++下是怎么处理的?
[/Quote]


unsigned char* data8;
unsigned short* data16;

读入到 data8 里面

data16 = (unsigned short*)data8;

就好了,只需分配一处内存。

gomoku 2011-01-07
  • 打赏
  • 举报
回复
你在C++下是怎么处理的?
jywzzz 2011-01-07
  • 打赏
  • 举报
回复
3楼,您知不知道CT重建的数据量是多少……

您没有处理过不代表就没有。

其他8位什么的,我也不和您计较了。
mjp1234airen4385 2011-01-07
  • 打赏
  • 举报
回复
不应该的吧,byte和ushort的大小都是8位的,没有什么区别的。
为什么要转换呢。
另外没有一次处理400M数据的程序吧。
都是读取少量数据,处理完了,再次读取。
jywzzz 2011-01-07
  • 打赏
  • 举报
回复
2楼,这样的话,读取速度我会受不了的。
baihualin1983 2011-01-07
  • 打赏
  • 举报
回复
可以不必一次的读出来,一次读出一部分然后进行处理,或边读边处理

110,535

社区成员

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

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

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