字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,
字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
字节流处理单元为1个字节, 操作字节和字节数组。我将
“哈哈发达eeedfdagfr!@#$%^&*()_+”保存为unicode编码的data.txt文件,
分别用reader/writer和inputstream和outputstream来读写到两个txt文件中为什么reader/writer写入的有乱码,inputstream/outputstream写入的没有乱码将data.txt编码改成utf-8后,reader/writer和inputstream和outputstream写入文件,都没有乱码1:reader/writer都什么时候用
2:txt是文本文件,为什么用inputstream/outputstream也可以读写代码如下:
public class ReaderTest {


public static void readWrite1() throws Exception {
String filePath = "c:\\data.txt";
String out = "c:\\out1.txt";
File infile = new File(filePath);
File outfile = new File(out);

if(!outfile.exists()) {
outfile.createNewFile();
}



FileReader fileReader = new FileReader(infile);
FileWriter outWriter = new FileWriter(outfile);

while(true) {
int reader = fileReader.read();
if(reader == -1) {
break;
}

outWriter.write(reader);
}
outWriter.flush();

fileReader.close();
outWriter.close();

}


public static void inputStream1() throws Exception {
String filePath = "c:\\data.txt";
String out = "c:\\out2.txt";
File infile = new File(filePath);
File outfile = new File(out);

if(!outfile.exists()) {
outfile.createNewFile();
}

FileInputStream inputStream = new FileInputStream(infile);
FileOutputStream outStream = new FileOutputStream(outfile);

while(true) {
int oneByte = inputStream.read();
if(oneByte == -1) {
break;
}
outStream.write(oneByte);
}


inputStream.close();
outStream.close();
}

public static void main(String[] args) throws Exception {
readWrite1();
inputStream1();
}
}
java

解决方案 »

  1.   

    Java 使用UTF_8 ENCODING。 TXT 保存的UNICODE 是UTF-32
      

  2.   

    reader 会先把你的TXT 保存的BYTE CODE DECODING 再读入JAVA程序。 而WRITER 先把你输入的character ENCODING 再把 BYTE 写到你的文件。如果用不同的ENCODING/DECODING schema 就会有乱码。而INPUTSREAM/OUTPUTSTREAM 是直接读写BYTE
      

  3.   

    如果用不同的ENCODING/DECODING schema 就会有乱码
    这地方不太懂,什么地方造成不同了?
    data.txt是unicode编码,写入的也是unicode呀
      

  4.   


    本例中那个环节造成
    不同的ENCODING/DECODING schema 
      

  5.   


    本例中那个环节造成
    不同的ENCODING/DECODING schema 
    当你声明 FileWriter outWriter = new FileWriter(outfile);的时候,用的是操作系统自定义的ENCODING (Cp1252)。 但是NOTEPAD UNICODE 是UTF-16 Little Endian (UTF-16LE)。 这里就产生了差别
      

  6.   


    本例中那个环节造成
    不同的ENCODING/DECODING schema 
    当你声明 FileWriter outWriter = new FileWriter(outfile);的时候,用的是操作系统自定义的ENCODING (Cp1252)。 但是NOTEPAD UNICODE 是UTF-16 Little Endian (UTF-16LE)。 这里就产生了差别围观大神级回答!
      

  7.   


    字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符
    unicode字符就只能用字符流
    搞不清楚,什么时候用字符流,实际应用中,基本用字节流
      

  8.   


    本例中那个环节造成
    不同的ENCODING/DECODING schema 
    当你声明 FileWriter outWriter = new FileWriter(outfile);的时候,用的是操作系统自定义的ENCODING (Cp1252)。 但是NOTEPAD UNICODE 是UTF-16 Little Endian (UTF-16LE)。 这里就产生了差别
    这些知识能够提供一个书或网址,参考下