char / int Problem

uepselon

Grünschnabel
Hallo,

folgendes problem, ich lese eine Datei byteweise ein und schreibe jedes gelesene Byte in eine andere Datei:

int b;
while((b = in.read()) != -1) {

out.print((char)b);

}

So dass klappt eigentlich ganz gut, nur manche Bytes werden von Java falsch konvertiert!

Z.B. wird aus gelesenen Werten zwischen (int) 128 bis 160 genrell als char = ? festgelegt obwohl das nicht stimmt. Ergo ist die geschriebene datei nicht indentisch mit der gelesenen. Woran liegt dass?

Gruß,
ueps
 
Hallo!

Du erhälst die vermeintlich "Falschen" Werte, da du mit deiner Art die Datei zu lesen die automatische "Byte-Zeichenencodierung" umgehst. Außerdem ist es nicht gerade effizient jedes byte aus der einen Datei gleich in die andere zu schreiben ...

Warum machst du nicht sowas (nehme an das du eine Datei kopieren willst):
Code:
/*
 * Created on 16.02.2005@22:57:46
 *
 * TODO Licence info
 */
package de.tutorials;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * @author Administrator
 *
 * TODO Explain me
 */
public class FileCopyExample {

    public static void main(String[] args) throws Exception {
        copyFile("c:/abc.txt", "c:/def.txt");
    }

    /**
     * @param string
     * @param string2
     */
    private static void copyFile(String source, String destination)
            throws Exception {
        File src = new File(source);
        File dest = new File(destination);

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
                src));

        BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream(dest));

        byte[] buffer = new byte[8192];
        int len = 0;

        while ((len = bis.read(buffer)) > 0) {
            bos.write(buffer, 0, len);
        }

        bos.flush();
        bos.close();
        bis.close();
    }
}

Gruß Tom
 
Zurück