从服务器读取二进制数据

时间:2013-05-27 12:43:49

标签: java objective-c xcode inputstream binary-data

我希望阅读来自java服务器的二进制数据,如

DataOutputStream dos = new DataOutputStream(response.getOutputStream());
//dos.writeInt(5);
dos.writeUTF("some text");
dos.flush();

在iOS方面

[stream open];
Byte buffer[100];
NSMutableData *data = [[NSMutableData alloc] init];
while ([stre.stream hasBytesAvailable])
{
    int bytesRead = [stre.stream read:buffer maxLength:100];
    if(bytesRead == -1)
        continue;
   // bytesRead -= 2; //exclude the binary header
    [data appendBytes:buffer length:bytesRead];

}
[stre.stream close];

NSString * temp = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

NSLog(@"%@", temp);

但仍然无法获得字符串。这个问题与编码有关吗?我可以使用什么类型的编码来解决这个问题。

@nd thing我想从流中读取iOS上的整数,字符串,UTFCharacters。有没有办法如何读取缓冲区,即readInteger(),readString()和readCharacter()。

1 个答案:

答案 0 :(得分:0)

我不是IOS的专家,但如果您希望实际使用DataOutputStream之外的基于文本的协议使用工具,那么请不要使用writeUTF()

对于基于纯文本的协议使用

PrintWriter w = new PrintWriter(new OutputStreamWriter(response.getOutputStream()))

甚至只是

PrintWriter w = response.getWriter();

现在作家:

w.print(str);
w.println(str);

如果要组合二进制和字符串数据,请使用DataOutputStream.writeChars(str)