`
robinsoncrusoe
  • 浏览: 746643 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

readUTF()和writeUTF()

    博客分类:
  • JAVA
阅读更多
这是dataOutputStream 的方法~~使用utf-8编码 其实就是从unicode变过来的,utf8编码把其中的ASC编码变成1个字节,其他其他字符2到3个字节!因为dataInput(output)Stream 属于字节流,所以用这个编码可以把其他形式的转化过来 


writeUTF(String str);
write(int b) ;
writeBytes(String s) ;
这几个方法可以传的参数不一样。
writeUTF和writeBytes都可以传String类型的参数,而write就不行了。

-->2008/04/01
public final void writeUTF(String str)
                    throws IOException以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。 
首先,通过 writeShort 方法将两个字节写入输出流,表示后跟的字节数。该值是实际写出的字节数,不是字符串的长度。根据此长度,使用字符的 UTF-8 修改版编码按顺序输出字符串的每个字符。如果没有抛出异常,则计数器 written 增加写入输出流的字节总数。该值至少是 2 加 str 的长度,最多是 2 加 str 的三倍长度。 

String readUTF()
               throws IOException读入一个已使用 UTF-8 修改版格式编码的字符串。readUTF 的常规协定是:该方法读取使用 UTF-8 修改版格式编码的 Unicode 字符串的表示形式;然后以 String 的形式返回此字符串。 
首先读取两个字节,并使用它们构造一个无符号 16 位整数,构造方式与 readUnsignedShort 方法的方式完全相同。该整数值被称为 UTF 长度,它指定要读取的额外字节数。然后成组地将这些字节转换为字符。每组的长度根据该组第一个字节的值计算。紧跟在某个组后面的字节(如果有)是下一组的第一个字节。 

如果组的第一个字节与位模式 0xxxxxxx(其中 x 表示“可能为 0 或 1”)匹配,则该组只有这一个字节。该字节被左侧补零,转换成一个字符。 

如果组的第一个字节与位模式 110xxxxx 匹配,则该组只由字节 a 和另一个字节 b 组成。如果没有字节 b(因为字节 a 是要读取的最后一个字节),或者字节 b 与位模式 10xxxxxx 不匹配,则抛出 UTFDataFormatException。否则,将该组转换成字符:


(char)(((a& 0x1F) << 6) | (b & 0x3F))
 如果组的第一个字节与位模式 1110xxxx 匹配,则该组由字节 a 和另外两个字节 b 和 c 组成。如果没有字节 c(因为字节 a 是要读取的最后两个字节之一),或者字节 b 或字节 c 与位模式 10xxxxxx 不匹配,则抛出 UTFDataFormatException。否则,将该组转换成字符:


 (char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))
 如果组的第一个字节与模式 1111xxxx 或模式 10xxxxxx 匹配,则抛出 UTFDataFormatException。 
如果在执行整个过程中的任意时间到达文件末尾,则抛出 EOFException。 

在通过此过程将每个组转换成字符后,按照从输入流中读取相应组的顺序,将这些字符收集在一起,形成一个 String,然后该字符串将被返回。 

可以使用 DataOutput 接口的 writeUTF 方法写入适合此方法读取的数据。 
分享到:
评论

相关推荐

    wifesocket

    以上代码利用Socket对象和ServerSocket对象进行简单的网络交互,即客户端通过DataOutputStream对象的writeUTF()方法向服务器发送消息,服务器利用DataInputStream对象的readUTF()方法读出数据。 看上去挺好,但...

    PhoneBooks

    dos.writeUTF(userName); dos.writeUTF(mobilePhone); dos.writeUTF(email); dos.writeUTF(phone); baos.close(); dos.close(); return baos.toByteArray(); } public static Account deserialize(byte[]...

    Java_Socket聊天室完整源代码.pdf

    - **readUTF()和writeUTF()**:这两个方法用于读取和写入UTF格式的字符串。readUTF()会读取一个由writeUTF()写入的UTF编码的字符串。 - **readLine()和writeUTF()**:在客户端,使用readLine()方法从标准输入流中...

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

    - 数据的序列化和反序列化(如使用`readUTF()`和`writeUTF()`)必须保持客户端和服务器的一致性,否则会导致通信错误。 通过以上知识点,你可以开始构建基本的Java远程控制程序,但实际应用中还需要考虑更多的因素...

    数据库导入和实现的方法

    根据给定的信息,本文将详细解析“数据库导入和实现的方法”,包括如何进行数据对象的序列化与反序列化、数据库接口定义以及服务层接口的设计等内容。 ### 一、数据对象的序列化与反序列化 #### 1. Role类的设计 ...

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

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

    java程序socket编程示例代码

    下面是Java程序socket编程的示例代码,包括Server端和Client端的实现。 Socket编程基本概念 在了解Java程序socket编程之前,我们需要了解一些基本概念。Socket是一种网络编程的API,用于实现进程之间的通信。它...

    在线聊天系统源代码

    第四步,利用DataInputstream类的readUTF函数,进行数据的准备,并利用DateOutputstream类的writeUTF方法,将信息发送出去。 第五步,当传输结束后,调用socket的close方法,关闭连接。 利用Java实现一个简单的...

    Flex Soket与Java通讯

    例如,你可以使用`Socket.connect()`方法连接到指定的IP地址和端口号,然后使用`Socket.writeUTFBytes()`发送数据,`Socket.readUTF()`接收数据。 Java端,我们通常会创建一个ServerSocket来监听客户端的连接请求。...

    java实验七.pdf

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

    可运行socket实例

    在Java中,我们可以使用`java.io.InputStream`和`java.io.OutputStream`的子类,如`DataInputStream`和`DataOutputStream`,它们提供了方便的数据类型转换方法,如`readInt()`和`writeUTF()`等。 - 当数据传输完成...

    Flex与Java Socket通信

    而在Flex客户端,你可以使用Socket对象的writeUTF()和readUTF()方法进行字符串的读写。 例如,在服务端接收并发送数据: ```java DataOutputStream out = new DataOutputStream(newSocket.getOutputStream()); out...

    java实现客户端与服务端通信

    在Java编程中,实现客户端与服务端的通信通常涉及到网络编程的基本概念,主要使用到`java.net`和`java.io`这两个包中的类。这里提到的`Socket`命令是Java中用于建立网络连接的关键组件,它允许应用程序通过TCP/IP...

    java双人聊天源码.pdf

    - `writeUTF()`方法用于将字符串编码为UTF-8格式并写入流,`readUTF()`则是从流中读取UTF-8编码的字符串。 4. **服务器端**: - 服务器端的结构与客户端类似,同样创建了`Send`和`Receive`线程,但服务器端的`...

    Java输入、输出流.pdf

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

    java 聊天程序

    - **数据流管理**:`DataOutputStream`和`DataInputStream`用于处理网络数据传输,其中`writeUTF`和`readUTF`方法可安全地写入和读取UTF-8编码的字符串。 #### 结论 Java聊天程序展示了网络编程的基本原理和技术...

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

    `writeUTF`方法用于将加密的字符串以UTF格式写入文件。 4. 解密过程:从文件中读取数据,使用`FileInputStream`和`DataInputStream`创建输入流。`readUTF`方法读取UTF格式的数据,并调用`Decrypt`方法解密。 接着,...

    socket实例

    在上述代码中,`writeUTF()`方法用于将字符串编码后发送到服务器,而`readUTF()`则用于从服务器读取编码后的字符串。这两个方法都是基于Java的`DataInput`和`DataOutput`接口,它们提供了一种方便的方式来处理基本...

    浅谈Socket编程及Java实现

    例如,可以使用 `writeUTF()` 和 `readUTF()` 方法发送和接收字符串,或者使用 `writeInt()` 和 `readInt()` 方法传输整型数据。 总之,Java 中的 Socket 编程是实现客户端-服务器应用程序的关键技术,它基于 TCP/...

Global site tag (gtag.js) - Google Analytics