发信人: 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]
|
|