io输入输出流

dataOutputStream  对应writeutf    outputstream 对应于write   

定义一个buf把: 用buf存放输入流然后放到字符串里

//读--从客户端读数据

InputStream in = s.getInputStream(); byte buf[] = new byte[1024]; in.read(buf); System.out.println("read info: "+new String(buf));

 http://www.yiibai.com/java/io/dataoutputstream_writeutf.html

首先电脑有两种UTF,分别是UTF8和UTF16,UTF8占据的内存小,所以网络程序一般是UTF8,这里的writeUTF(),主要用来把你的的文件内容以UTF8的形式传入管道,进行传输,希望对你有用

http://blog.csdn.net/xkwong/article/details/6450040

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


  1. writeUTF(String str);   
  2. write(int b) ;   
  3. writeBytes(String s) ;   
  4. 这几个方法可以传的参数不一样。   
  5. writeUTF和writeBytes都可以传String类型的参数,而write就不行了。   
  6.   
  7. public final void writeUTF(String str)   
  8.                     throws IOException以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。    
  9. 首先,通过 writeShort 方法将两个字节写入输出流,表示后跟的字节数。该值是实际写出的字节数,不是字符串的长度。根据此长度,使用字符的 UTF-8 修改版编码按顺序输出字符串的每个字符。如果没有抛出异常,则计数器 written 增加写入输出流的字节总数。该值至少是 2 加 str 的长度,最多是 2 加 str 的三倍长度。    
  10.   
  11. String readUTF()   
  12.                throws IOException读入一个已使用 UTF-8 修改版格式编码的字符串。readUTF 的常规协定是:该方法读取使用 UTF-8 修改版格式编码的 Unicode 字符串的表示形式;然后以 String 的形式返回此字符串。    
  13. 首先读取两个字节,并使用它们构造一个无符号 16 位整数,构造方式与 readUnsignedShort 方法的方式完全相同。该整数值被称为 UTF 长度,它指定要读取的额外字节数。然后成组地将这些字节转换为字符。每组的长度根据该组第一个字节的值计算。紧跟在某个组后面的字节(如果有)是下一组的第一个字节。    
  14.   
  15. 如果组的第一个字节与位模式 0xxxxxxx(其中 x 表示“可能为 0 或 1”)匹配,则该组只有这一个字节。该字节被左侧补零,转换成一个字符。    
  16.   
  17. 如果组的第一个字节与位模式 110xxxxx 匹配,则该组只由字节 a 和另一个字节 b 组成。如果没有字节 b(因为字节 a 是要读取的最后一个字节),或者字节 b 与位模式 10xxxxxx 不匹配,则抛出 UTFDataFormatException。否则,将该组转换成字符:   
  18.   
  19.   
  20. (char)(((a& 0x1F) << 6) | (b & 0x3F))   
  21.  如果组的第一个字节与位模式 1110xxxx 匹配,则该组由字节 a 和另外两个字节 b 和 c 组成。如果没有字节 c(因为字节 a 是要读取的最后两个字节之一),或者字节 b 或字节 c 与位模式 10xxxxxx 不匹配,则抛出 UTFDataFormatException。否则,将该组转换成字符:   
  22.   
  23.   
  24.  (char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))   
  25.  如果组的第一个字节与模式 1111xxxx 或模式 10xxxxxx 匹配,则抛出 UTFDataFormatException。    
  26. 如果在执行整个过程中的任意时间到达文件末尾,则抛出 EOFException。    
  27.   
  28. 在通过此过程将每个组转换成字符后,按照从输入流中读取相应组的顺序,将这些字符收集在一起,形成一个 String,然后该字符串将被返回。    
  29.   
  30. 可以使用 DataOutput 接口的 writeUTF 方法写入适合此方法读取的数据。   

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

http://blog.csdn.net/liangrockman/article/details/5740275

[java] view plain copy
 
  1. import <a href="http://lib.csdn.net/base/java" class='replace_word' title="Java 知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Java</a>.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编码后的字符。

http://blog.csdn.net/dengyunze/article/details/160648

正在用JAVA写一段连接MSN服务器的代码,但是发现怎么给MSN服务器发送命令消息,结果都只有一个,那就是没有响应,随后Socket连接被关闭。

        发送消息的代码如下:
        public void send(String cmd)
         {
              try{
                   DataOutputStream dos = new DataOutputStream(sock_.getOutputStream());
                   dos.writeUTF(cmd);
                  }catch(Exception ex)
                  {
                   System.out.println("MSNPConnection::send fail, " + ex.getMessage());
                  }
         }
        刚开始以为给服务器发送的命令格式错了,于是把所有发送的数据包都截下来分析。在截包中发现一个奇怪的现象,在我发送的每个命令前都多出了两个字节,而且很明显是一个数字,于是开始领悟,莫非是writeUTF在其中搞怪?

        翻开JDK的文档,直接搜索writeUTF函数的说明,发现以下文字:
        

        writeUTF

     public void writeUTF(String str)
              throws IOException
Writes two bytes of length information to the output stream, followed by the Java modified UTF representation of every character in the string。

天啦,果然是被耍了,原来writeUTF会在开头自以为是的加上长度信息。
原文地址:https://www.cnblogs.com/tianzijiaozi/p/7446920.html