如何在Obj-C中实现类似Java的ByteBuffer的最佳方法?

3
我正在尝试为iPhone构建一个应用程序,尽管我完全不熟悉Obj-C。对于其中一个问题,我在Java中使用了ByteBuffer,但是我在苹果的文档中没有找到任何适当的类。所以我可能必须自己实现它。
我的问题是,如何最好地做到这一点:
  • Obj-C中是否有类似的类?(那将是最好的解决方案 ;))
  • 是否应该使用诸如NSData之类的Obj-C类来完成?
  • 还是应该保持纯C代码?

这真的取决于你想做什么。你应该编辑你的问题,增加一些更多的上下文。 - Alex
我的目标是实现一个完全功能的Obj-C版本的java.nio.ByteBuffer。只想知道我应该使用什么来达到这个目标。 - Koraktor
3个回答

8
你可能想使用NSMutableData。

好的... 你有没有例子展示如何从NSMutableData中读取浮点数或任何其他数据类型? - Koraktor
1
据我所知,目前没有这样的方法,但是您可以将它们实现为NSData的类别,以便它们可用于NSData及其任何子类。只需使用getBytes:length:获取sizeof(float)字节,然后将缓冲区进行强制转换即可。 - Mark Probst

6

我对java.nio.ByteBuffer的记忆(从很久以前使用Java开始)是,ByteBuffer实现了对字节数组的顺序读/写。这类似于由NSData (用于输入)支持的NSInputStream:

NSInputStream *inputStream = [NSInputStream inputStreamwithData:myData]; //assuming myData is NSData*

float myFloat;

if([inputStream hasBytesAvailable]) { // NO if you've already read to the end of myData
  NSInteger bytesRead = [inputStream read:&myFloat maxLength:sizeof(myFloat)];
  NSAssert(bytesRead == sizeof(myFloat);
}

您可以使用写入到NSDataNSOutputStream进行类似操作。

这看起来非常有前途。非常感谢。 - Koraktor
1
我很好奇你的端口会怎样,如果成功了,我非常有兴趣使用结果。等准备好了请给我发个消息。 - Barry Wark
这些 github.com 的链接已经失效了,但是当代码重新上线时,我非常期待去看一下。 - Barry Wark
嘿,Koraktor,我需要你的Obj-c版本的Byte buffer。你能否给我你更新后的github链接或指导我该阅读什么来实现Java ByteBuffer与Objective c或Swift。谢谢。 - Gaurav Vyas
@Koraktor,你能分享一下Byte buffer的Obj-c版本吗?谢谢。 - Waaheeda
显示剩余2条评论

0

我有一个类似的问题。ilya pointed my here with his answer

我的目标是实现一个完全功能的Obj-C版本的java.nio.ByteBuffer。只是想知道我应该使用什么来实现。

那将是你自定义的类。

对于我的情况,我认为应该使用NSInputStreamNSOutputStream。肯定不是NSMutableData,因为这是被接受并且大多数人投票的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接