Java:与DataInputStream中的dis.read()和dis.readUTF()的区别

Java:与DataInputStream中的dis.read()和dis.readUTF()的区别,java,sockets,serversocket,datainputstream,Java,Sockets,Serversocket,Datainputstream,简单的问题 dis.read()和dis.readUTF()有什么区别 例如,dis.read() 对吗 若服务器有dis.readUTF(),它不能读取字节流吗 @Override public void run() { // TODO Auto-generated method stub while(mEnabled) { if (!mFileReceive) { try { // read

简单的问题

dis.read()
dis.readUTF()
有什么区别

例如,
dis.read()

对吗

若服务器有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;
            }
@覆盖
公开募捐{
//TODO自动生成的方法存根
while(mEnabled)
{
如果(!mFileReceive){
试一试{
//阅读
字符串tmpStr=dis.readUTF();
//下面是'dis.readUTF()`=4096)
继续;
System.out.println(“Print:+mStringBuffer”);
parse=newparseJSON(null,mStringBuffer.toString());
//确认信息
如果(已启用){
mFileName=“{opcode:0x06,ACK:C”+parse.getParsedData().get(“ACK”).substring(1)+“}”;
dos.writeUTF(mFileName);
dos.flush();
System.out.println(“确认消息发送:“+mFileName”);
mFileName=null;
}
if(parse.getParsedData().get(“操作码”).equals(“155”)){
mFileReceive=true;
}
parse.clear();
parse=null;
}捕获(IOE异常){
//TODO自动生成的捕捉块
System.out.println(“服务器线程断开”);
打破
}
readUTF()以修改后的UTF-8格式编码的Unicode字符串表示形式从流中读取;然后将该字符串作为字符串返回

您应该使用以字节数组为参数的读取方法。以下是其说明:

公共最终整数读取(字节[]b)引发IOException


从包含的输入流中读取一定数量的字节,并将其存储到缓冲区数组b中。实际读取的字节数作为整数返回。

(1)您不了解Javadoc的哪一部分?(2)“如果服务器实现了dis.readUTF(),则无法读取字节流?”没有意义。
DataInputStream
ObjectInputStream
实现这两种方法。@EJP我的问题是'dis.readUTF'可以读取字节流。JAVADOC说此操作的字节是从包含的输入流读取的。客户端发送到服务器字节数组。但服务器没有捕获它。所有这些API都是从字节流读取的。但是r
readUTF()
读取
writeUTF()编写的格式。如果你不调用
writeUTF()`我不明白你为什么要调用
readUTF()
@EJP,非常感谢,
readUTF()
writeUTF()
看起来像是合作伙伴。@EJP我的Ubuntu使用了Locale KO\u KR.utf8。所以,我打算使用“readUTF()”“。非常感谢。你的建议非常有用。@11684,没错,这是我的珍品。@EJP客户端发送到服务器字节数组数据。@reinhard.lee在这种情况下,你应该在你的问题中提到这一点。你没有说客户端在写什么。@EJP对不起,我不知道。”。