Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5513943
  • 博文数量: 763
  • 博客积分: 12108
  • 博客等级: 上将
  • 技术积分: 15717
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-28 21:21
个人简介

业精于勤,荒于嬉

文章分类

全部博文(763)

文章存档

2018年(6)

2017年(15)

2016年(2)

2015年(31)

2014年(14)

2013年(87)

2012年(75)

2011年(94)

2010年(190)

2009年(38)

2008年(183)

2007年(28)

分类: C/C++

2009-12-18 10:37:13

现在在做的一个资讯产品,服务器返回数据是二进制流。以前在J2ME平台上可以使用DataInputStream和DataOutputStream轻松完成二进制数据的读写。那么在Cocoa Touch上有什么方法读写二进制数据呢?在通常的编程语言里面(这里指的是C/C++/Java/C#/Ruby/…),以下几个东西是如此关联起来的:

字符串类用来处理字符串存储,查找,替换…等等常规功能。

路径类用来处理所有与文件系统路径相关的事情,比如什么把路径分段,拿到文件扩展名,文件是否存在等等。

目录类则用来看某个路径的目录是否存在,是不是为空,等等。

这里一般会有三个类来处理各自逻辑相关的事情,但是,注意但是,Cocoa里面的构建法则不是这样的,它把所有与字符串相关的功能全部封装到了字符串类里面所以,NSString可以做的事情超多,从打开文件读取/写入字符串内容,到判断路径是否存在,等等,所有的事情,它都一手包了。 这样倒是方便程序员了,反正一旦有什么事情和字符串有点关系,找它准没错。好了,讲了这么一堆,回过头来看这个问题,如何读写二进制文件?我写了各种类型的数据(整形,浮点,字符串)进去,怎么读出来? 这里提到了二进制对吧,也就是数据对吧,那么好了,找NSData就行了。来看这段小代码,我准备了一个文件路径做演示,还有几个要写进去的数据。

NSString *path = @"/Users/Allen/Desktop/test.dat";

NSString *temp = @"Jarod Yv";

int i = 100;

float f = 98.3333f;

新建了一个可修改的数据存储器NSMutableData,并把上面的几个数据都加进去,后面直接写入文件。 唯一要注意的只有字符串,因为涉及到编码问题,所以我们必须要用字符串本身的方法拿到根据编码生成出来的数据。

NSMutableData *writer = [[NSMutableData alloc] init];

[writer appendData:[temp dataUsingEncoding:NSUTF8StringEncoding]];[writer appendBytes:&i length:sizeof(i)];

[writer appendBytes:&f length:sizeof(f)];

[writer writeToFile:path atomically:YES];

[writer release];

别忘了释放用完的东西。好了,写完成了,让我们看看读 int ii; float ff; NSString *ttemp;

 NSData *reader = [NSData dataWithContentsOfFile:path];

ttemp = [[NSString alloc] initWithData:[reader subdataWithRange:NSMakeRange(0, [temp length])]encoding:NSUTF8StringEncoding];

[reader getBytes:&ii range:NSMakeRange([temp length], sizeof(ii))]; [reader getBytes:&ff range:NSMakeRange([temp length] + sizeof(ii), sizeof(ff))];

NSLog(@"string:%@ int:%i float:%f", ttemp, ii, ff);

[temp release];

[ttemp release];

[path release];

看到吧,一样的简单,同样要注意的只有字符串。

 好了,相信大家已经知道该怎么做了,我们已经可以玩转任何数据了

阅读(12821) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~