DataOutputStream的writeUTF()方法与OutputStreamWriter的write()区别!

本文通过实例比较了DataOutputStream的writeUTF()方法与OutputStreamWriter的write()方法的区别。writeUTF()会在UTF-8编码的字符串前添加长度标识,而write()直接写出编码后的字符。

DataOutputStream的writeUTF()方法与OutputStreamWriter的write()区别!

原创  2010年07月16日 16:59:00

[java]  view plain  copy
  1. import java.io.DataOutputStream;  
  2. import java.io.File;  
  3. import java.io.FileOutputStream;  
  4. import java.io.IOException;  
  5. import java.io.OutputStreamWriter;  
  6. public class FileTest {  
  7.       
  8.     /** 
  9.      * @param args 
  10.      */  
  11.     public static void main(String[] args) {  
  12.         File file = new File("G://DataOutputStream.txt");  
  13.         File file2 = new File("G://OutputStreamWriter.txt");  
  14.         try {  
  15.             //file.createNewFile();  
  16.             DataOutputStream output = new DataOutputStream(new FileOutputStream(file));  
  17.               
  18.                 output.writeUTF("a");  
  19.               
  20.             output.writeUTF("b");  
  21.               
  22.             file2.createNewFile();  
  23.               
  24.             OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file2));  
  25.             writer.write("a");  
  26.             writer.write("b");  
  27.             writer.flush();  
  28.         } catch (IOException e) {  
  29.             // TODO Auto-generated catch block  
  30.             e.printStackTrace();  
  31.         }  
  32.           
  33.           
  34.         /*for(File f:file.listRoots()){ 
  35.             System.out.println(f); 
  36.         }*/  
  37.     }  
  38. }  

两个方法写出的16进制码分别是

DataOutputStream的writeUTF():00 01 61 00 01 62

OutputStreamWriter的write():61 62

经个人分析,writeUTF()写出一个UTF-8编码的字符串前面会加上2个字节的长度标识,已标识接下来的多少个字节是属于本次方法所写入的字节数。

而write()方法按照常理,直接写出UTF-8编码后的字符。

即时通信系统概述 即时通信系统是通过网络让不同地理位置的用户可以实时交流信息的一种应用。该系统主要分为两部分:服务器端和客户端。服务器端负责接收和转发信息,而客户端则用于发送信息给服务器,并接收来自服务器的信息。 系统实现的关键步骤 基础通信 使用ServerSocket和Socket建立服务器客户端之间的连接。 客户端通过Socket向服务器发送字节信息,服务器接收并输出。 使用InputStream和OutputStream处理数据传输。 字符信息传输 为了更方便地传输文本信息,可以通过InputStreamReader和OutputStreamWriter将字节流转换成字符流。 利用BufferedReader和BufferedWriter提高效率,但需注意缓存问题,推荐使用DataInputStream和DataOutputStream配合readUTF()writeUTF()方法实现连续读写。 多客户端支持 引入线程机制,使得服务器可以同时处理多个客户端请求。 创建一个独立的线程类来管理每个客户端连接,确保每个客户端都可以独立地服务器交互。 图形用户界面 提供了图形化界面的示例代码,如GuiServer.java、GuiClientMain.java和GuiClient.java,用于启动服务器、登录和发送消息等功能。 通过监听按钮事件来控制服务器的启动和停止,以及用户登录和消息发送。 高级特性 实现了新用户登录通知、老用户信息同步、群聊和个人聊天功能。 设计了特定的消息格式(例如:head/ip/port/username/sendmsg),便于解析和处理不同类型的消息。 添加了客户端下线通知机制,保证其他用户能够及时了解某个用户离线的情况。 知识点 Java Socket编程 Java中使用Socket类进行网络编程,允许应用程序之间通过TCP/IP协议进行通信。它提供了一种简单的方式来进行客户端-服务器模式下的数据交换。 线程机制 线程是操作系统能够进行运算调度的最小单位。通过创建线程,可以实现并发执行任务,从而提高程序性能,尤其是在需要同时处理多个客户端连接的情况下。 GUI开发 使用Swing库构建图形用户界面,提供了丰富的组件,如按钮、文本框等,可简化人机交互界面的设计过程。 上传文件
最新发布
06-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值