我需要一个可以从内存流中读写并支持查找的 Cocoa 类。在C#,MemoryStream
支持方法seek
,和在Java中,ByteArrayInputStream
支持的方法mark
,skip
和reset
。
在iOS开发中,什么是等价的类和方法?
我的项目需要上述功能,如果默认情况下 iOS 框架不支持它,那么实现我自己的最佳方法是什么?例如,编写我自己的从NSInputStream
/继承的流子类NSOutputStream
,它将在内部包含自定义代码?
我很困惑.我有一个开放的NSInputStream认为它有可用的字节.当我读取字节时,操作总是返回0.我已经到处搜索,我的代码看起来像其他大多数人都做同样的事情.这是一个如此低级别的操作,我无法弄清楚它是如何出错的.我通过连接到许多不同的主机尝试了这个.我也看过Wireshark,我可以看到主机收到我写的字节,但是read:maxBytes操作仍然总是返回0 ???
case NSStreamEventHasBytesAvailable:
{
//Check stream status
NSString *returnedStatus;
commandLength = [commandString length];
[commandString deleteCharactersInRange:NSMakeRange(0, commandLength)];
returnedStatus = [NSString stringWithString:[self decodeStatus:[stream streamStatus]]];
[commandString appendFormat:@"inputStream %@ status=%@\n",stream, returnedStatus];
[self writeCommand:commandString];
uint8_t *buf[buffLength];
NSUInteger len = 0;
len = [(NSInputStream *)stream read:(uint8_t *)buf maxLength:buffLength];
if (len == 0) {
//len = buffLength;
[self writeCommand:@"No bytes read!\n"];
}
Run Code Online (Sandbox Code Playgroud) 在写NSStream
我应该依靠的时候
' hasSpaceAvailable
'方法或'handle:event'方法中的事件
' NSStreamEventHasSpaceAvailable
'
或者我应该检查' hasSpaceAvailable
'如果不可用,我必须在特定的时间后重试或者我应该等到代表活动打电话直到我开始写?
截至目前它的工作时,我使用hasSpaceAvailable并在一段时间后重试不知道它是否正确的做法.
任何帮助都会很棒.
在java中我有这样的东西:
String data = "someFile.txt";
InputStream fin = Thread.currentThread().getContextClassLoader()
.getResourceAsStream(data);
Run Code Online (Sandbox Code Playgroud)
它基本上fin
用文本文件的内容初始化.
我试图将这个java代码转换为objectiveC,我真的迷失了如何为第二行做到这一点,即Thread.currentThread().getContextClassLoader().getResourceAsStream(data)
在objectiveC中等效于什么?
注意:我无法直接将文件读取到文件中,InputStream
因为数据是在字符串变量中全局提供的.
我是objectiveC的新手,对不起,如果这是微不足道的,但任何帮助都会非常感激.