【发布时间】:2012-06-09 03:03:47
【问题描述】:
简单的问题。
dis.read() 和 dis.readUTF() 有什么区别?
例如dis.read()只读取字节数组,而dis.readUTF()访问String类型。
对吗?
如果Server有实现dis.readUTF(),它不能读取字节流?
@Override
public void run() {
// TODO Auto-generated method stub
while(mEnabled)
{
if (!mFileReceive) {
try {
// read
String tmpStr = dis.readUTF();
// here come `dis.readUTF()` <- it is can not read byte array?
mStringBuffer += tmpStr;
if (tmpStr.length() >= 4096)
continue;
System.out.println("Print : " + mStringBuffer);
parse = new ParseJSON(null, mStringBuffer.toString());
// Ack Message
if (mAckEnabled) {
mFileName = "{opcode:0x06,ACK:C" + parse.getParsedData().get("ACK").substring(1) + "}";
dos.writeUTF(mFileName);
dos.flush();
System.out.println("Ack Message Send : " + mFileName);
mFileName = null;
}
if (parse.getParsedData().get("opcode").equals("155")) {
mFileReceive = true;
}
parse.clear();
parse = null;
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("ServerThread disconnect");
break;
}
【问题讨论】:
-
(1) Javadoc 的哪一部分您不理解? (2) “如果Server有实现dis.readUTF(),它不能读取字节流?”是没有意义的。
DataInputStream和ObjectInputStream实现了这两种方法。 -
@EJP 我的问题是 'dis.readUTF' 可以读取字节流。 JAVADOC 说 从包含的输入流中读取此操作的字节。 客户端发送到服务器字节数组。但是服务器没有抓住它。
-
所有那些从字节流中读取的 API。但是
readUTF()读取的格式是writeUTF() writes. If you're not callingwriteUTF()` 我不明白你为什么要调用readUTF()。 -
@EJP 非常感谢,
readUTF(),writeUTF()看起来像合作伙伴。 -
@EJP 我的 Ubuntu 使用 Locale KO_KR.utf8。所以,我打算使用'readUTF()'。太感谢了。您的建议很有帮助。
标签: java sockets serversocket datainputstream