zoukankan      html  css  js  c++  java
  • 用NSData玩转二进制文件的读写 (转)

    今天看到有同学问如何读写二进制文件,那就顺道讲一下吧。
    在Cocoa的世界里,所有与某个物件相关的东西都被该物件实现。好吧,我承认,这句话比较扯…. 还是上例子说明吧。
     
    在通常的编程语言里面(这里指的是C/C++/Java/C#/Ruby/…),以下几个东西是如此关联起来的:
     
    字符串类用来处理字符串存储,查找,替换…等等常规功能。
    路径类用来处理所有与文件系统路径相关的事情,比如什么把路径分段,拿到文件扩展名,文件是否存在等等。
    目录类则用来看某个路径的目录是否存在,是不是为空,等等。
     
    这里一般会有三个类来处理各自逻辑相关的事情,但是,注意但是,Cocoa里面的构建法则不是这样的,它把所有与字符串相关的功能全部封装到了字符串类里面。
    所以,NSString可以做的事情超多,从打开文件读取/写入字符串内容,到判断路径是否存在,等等,所有的事情,它都一手包了。
    这样倒是方便程序员了,反正一旦有什么事情和字符串有点关系,找它准没错。
     
    好了,讲了这么一堆,回过头来看这个问题,如何读写二进制文件?我写了各种类型的数据(整形,浮点,字符串)进去,怎么读出来?
    这里提到了二进制对吧,也就是数据对吧,那么好了,找NSData就行了。
     
    来看这段小代码,我准备了一个文件路径做演示,还有几个要写进去的数据。
     
    NSString *path = @"/Users/Allen/Desktop/test.dat";
     
    NSString *temp = @"Allen Dang";
    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];
    看到吧,一样的简单,同样要注意的只有字符串。
    好了,相信大家已经知道该怎么做了,我们已经可以玩转任何数据了
  • 相关阅读:
    zookeeper使用场景
    zookeeper安装配置
    hadoop 远程调试
    deep learning笔记
    Sentiment Analysis(1)-Dependency Tree-based Sentiment Classification using CRFs with Hidden Variables
    PRML阅读笔记 introduction
    Python 学习笔记(2)
    python nltk 学习笔记(5) Learning to Classify Text
    python nltk 学习笔记(4) Writing Structured Programs
    python nltk 学习笔记(3) processing raw text
  • 原文地址:https://www.cnblogs.com/zhwl/p/2285959.html
Copyright © 2011-2022 走看看