精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Java>>JAVA编程>>杂项>>关于DataOutputStream的一个问题.

主题:关于DataOutputStream的一个问题.
发信人: zombies()
整理人: zjxyz(2002-01-21 08:15:41), 站内信件
【 在 jephix (SimpleBlue) 的大作中提到: 】
: 我写了这样一个application希望把一个String写进一个文本文件. 程序编译执行
: 都正确, 可我打开这个文本文件却发现这个文件的第一, 二个字节分别是一个空
: 格和一个黑色的方块. 从第三个字节开始才是String里的内容. 不知道这是何故
: ? 该怎样解决?(以下是这个程序的源文件)
:    .......

import java.io.*; 
import java.lang.*; 

:public class MyWriter {     
:    public static void main(String args[]) { 
:      String MyFile = "writetest.txt", MyString="ABC"; 
:     File f = new File(MyFile); 

      DataOutputStream dos; 
      ^^^^^^^^^^^^^^^^^^^^^
           DataOutputStream 支持DataOutput Interface
           需DataInputStream配合

:      int intUIN; 
:      try { 
:         dos = new DataOutputStream
:              (new BufferedOutputStream(new FileOutputStream(MyFile), 128));


         dos.writeUTF(MyString); 
         ^^^^^^^^^^^^^^^^^^^^^^^
            writeUTF用了java特有的encoding方式
:      } 

:     catch (SecurityException e) {} 
:     catch (IOException ioe) {} 

:    } 
:} 

我想问题出在你用的 DataOutputStream 上, DataInput 和 DataOutput
提供了储存basic type的interface. 一般来说DataOutput的输出需有
一个DataInput来输入. 也就是说你用DataOutput输出一个Double object,
而由DataInput还原这个Double object. 这种方法为serialization提供
了可能,object可以被储存和还原.

在DataOutput中,writeUTF()主要配合DataInput中的readUTF(),这两个
function都用了Java特有的UniCode encoding scheme,Stream中第一,二
个byte表明了在这个stream中共有几个bytes.在你的例子中应该是0,3也就
是为什么你会看到一个空格和一个黑色的方块.其随后的内容根据每个字符的
unicode有不同的长度,0x0001-0x007F会被转换为0x01-0x7F,只有一个byte
per character. 而中文则根据code page转换成2 bytes per character.
这样被encode的content在普通的text viewer上是不能被正确显示的,除非
Text Viewer也是用DataInput来读入文件内容. 

但从你的应用来看,你是想把Text储存在文件上,这个情况下. 
DataOutputStream不是必须的. 你可以用StreamWriter.
Java的String中,每个Character用2bytes,所以你可根据需要用writer的
write(char[])或write(String).





--
Zombie
ICQ:6256854

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 203.101.42.250]

[关闭][返回]