我希望读取来自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事情是我想从流中读取iOS上的整数,字符串,UTFCharacters。是否有任何方法可以读取缓冲区即readInteger(), readString()和readCharacter()。
我不是IOS方面的专家,但如果你真的想实现基于文本的协议,请使用DataOutputStream
以外的工具,无论如何都不要使用writeUTF()
。
对于基于纯文本的协议,使用
PrintWriter w = new PrintWriter(new OutputStreamWriter(response.getOutputStream()))
或者只是
PrintWriter w = response.getWriter();
现在写在那里:
w.print(str);
w.println(str);
等。
如果要组合二进制和字符串数据,使用DataOutputStream.writeChars(str)