`
java2000.net
  • 浏览: 660194 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

writeUTF输出字符串失败的原因分析

阅读更多
字符串比较长了之后,数据就发不过去了,经检查JDK的源代码,原来有长度限制。
为了保险起见,我们还是不要超过65535/3 我看取20000好了。

  1.     public final void writeUTF(String str) throws IOException {
  2.         writeUTF(str, this);
  3.     }
  4.   static int writeUTF(String str, DataOutput out) throws IOException {
  5.     int strlen = str.length();
  6.     int utflen = 0;
  7.     int c, count = 0;
  8.     /* use charAt instead of copying String to char array */
  9.     for (int i = 0; i < strlen; i++) {
  10.       c = str.charAt(i);
  11.       if ((c >= 0x0001) && (c <= 0x007F)) {
  12.         utflen++;
  13.       } else if (c > 0x07FF) {
  14.         utflen += 3;
  15.       } else {
  16.         utflen += 2;
  17.       }
  18.     }
  19.     if (utflen > 65535)
  20.       throw new UTFDataFormatException("encoded string too long: " + utflen + " bytes");
  21.     // 其他的语句
  22.   }











<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>
分享到:
评论

相关推荐

    Java中使用数据输入输出流实现字符串加解密的代码清单.pdf

    在Java编程中,数据输入输出流(DataInputStream和DataOutputStream)是用于处理基本数据类型和字符串的I/O操作的重要工具。这两个类提供了机器无关的读写功能,使得在不同平台之间交换数据变得更加简单。本文将详细...

    网络通信,图片,文件,字符串传输

    例如,可以使用`DataOutputStream.writeUTF()` 和 `DataInputStream.readUTF()` 方法进行UTF-8编码的字符串传输。 文件传输则更为复杂,通常需要将文件拆分成多个数据块,逐个发送,确保每个数据块都正确无误地到达...

    Java输入、输出流.pdf

    例如,DataOutputStream 的 writeUTF 方法可以用于写入字符串数据,而 DataInputStream 的 readUTF 方法用于读取字符串数据。 文件输入输出流也是常用的一种流类型,FileInputStream 和 FileOutputStream 分别用于...

    socket字符发送

    - **发送字符串**:在客户端,通过输出流将字符串写入Socket,例如使用`writeUTF()`(如果使用DataOutputStream)或`println()`(如果使用PrintStream)方法。 - **接收字符串**:在服务器端,通过Socket的`...

    Java两种输入输出方式

    dos.writeUTF("输入的字符串是:" + inputStr); dos.writeInt(inputInt); dos.flush(); } } ``` 2. 基于缓冲区的I/O: Java NIO(New IO)库提供了基于缓冲区的I/O,它比传统的流I/O更高效,因为它减少了系统...

    JavaScript前端开发之实现二进制读写操作

    这个类中包含两个主要的方法:`writeUTF`和`readUTF`,分别用于将字符串编码为UTF-8的字节流并写入,以及从字节流中读取并解码UTF-8字符串。 `writeUTF`方法的实现考虑了UTF-8编码规则。UTF-8是一种变长编码,每个...

    手把手教你做java远程控制.doc

    例如,`readUTF()`和`writeUTF()`方法用于读写UTF-8编码的字符串,`Integer.parseInt()`用于将字符串转换为整数,而`writeUTF()`则用于将字符串写入输出流。 4. **示例代码解析** 示例代码展示了服务器端的基本...

    Java_Socket聊天室完整源代码.pdf

    readUTF()会读取一个由writeUTF()写入的UTF编码的字符串。 - **readLine()和writeUTF()**:在客户端,使用readLine()方法从标准输入流中读取用户输入的行,然后使用writeUTF()将其发送给服务器。 4. **异常处理**...

    java Socket与C#通信中中文乱码问题的解决方案

    Java默认使用UTF-8编码,而C#在处理字符串时可能使用其他编码,如GBK或ASCII。为了解决这个问题,我们需要确保两端在发送和接收数据时使用相同的字符编码。 首先,来看Java客户端的代码示例: ```java import java...

    java实验七.pdf

    在这个实验中,使用`readUTF()`和`writeUTF()`方法进行字符串的传输。 总结来说,这个实验涵盖了Java中TCP Socket通信的基本概念,包括Socket和ServerSocket的使用、多线程编程、异常处理以及数据传输。通过实践,...

    IO输入输出留

    输入 输出 保存文件 读取文件 java.io 包 java.io.File ============================================================================================ *表示磁盘文件或目录的路径 *可以表示一个不存在的路径...

    Java复习题三阅读程序题_软件.doc

    这里,`writeInt()`和`readInt()`分别用于写入和读取4字节的整数,`writeUTF()`和`readUTF()`则用于写入和读取UTF格式的字符串。 4. 第四个程序涉及到自定义异常。题目要求填写一个异常类的名称,该类继承自`...

    Android Socket编程源码(与PC通讯).rar

    例如,使用DataOutputStream的writeUTF()方法发送字符串,使用DataInputStream的readUTF()方法接收字符串。 4. **异常处理**:在进行Socket编程时,必须妥善处理各种可能的网络异常,如IOException、...

    Java聊天程序(Socket入门版,源码,有截图)

    通常,我们会使用`DataOutputStream.writeUTF()`和`DataInputStream.readUTF()`进行UTF-8编码的字符串传输。 5. **多线程**: 由于服务器可能需要同时处理多个客户端的连接,所以通常会为每个客户端创建一个单独的...

    java socket

    7. **发送消息到客户端**:在第42行,通过`writeUTF(message)`方法将键盘输入的字符串编码为UTF格式,并写入到客户端的输入流。 8. **关闭资源**:在退出循环后,关闭所有相关的输入/输出流以及服务器套接字,确保...

    j2me socket 服务端与 客户端聊天

    例如,`out.writeUTF(message)` 发送字符串,`in.readUTF()` 接收字符串。 4. **关闭资源**:完成通信后,客户端需要关闭输入流、输出流以及 Socket 连接,防止资源泄漏。 **二、J2ME Socket 服务端** 1. **创建 ...

    数据流读与写操作手册

    - `DataOutputStream`和`DataInputStream`:提供读写Java基本类型数据(如int、long)的能力,`writeUTF`和`readUTF`方法用于处理UTF-8编码的字符串。 - `PrintStream`和`PrintWriter`:方便地打印数据,`...

    java IO流(包含类之间的关系图)

    * StringWriter:字符串写入流,用于将字符数据写入字符串。 * PipedWriter:管道写入流,用于在两个线程之间传输数据。 * BufferedWriter:缓冲写入流,用于提高写入效率。 * PrintStream:打印流,用于打印输出。 ...

    JAVA第九、十、十一章测试答案1

    - `get()`方法代表消费者,它等待(`wait()`)直到有可用的字符串(`word`不为空),然后反转字符串并打印,最后清空`word`以便下一次消费。 - `save()`方法代表生产者,它等待(`wait()`)直到`word`为空,然后从...

Global site tag (gtag.js) - Google Analytics