2016-07-21 1 views
1

J'essaie de lire un fichier (peu importe l'extension) et j'écris après cela, mais quand je le fais, le fichier de sortie est différent de l'entrée.Lors de la lecture et de l'écriture d'un fichier, la sortie change

mon code est le suivant:

OutputStream outputStream = null; 
FileReader fr = new FileReader("rute\\inputfile.PNG"); 
BufferedReader br = new BufferedReader(fr); 
String line; 
while ((line= br.readLine()) != null) { 
    content += line; 
} 

byte[] toBytes= content.getBytes(); 
InputStream inputStream = new ByteArrayInputStream(toBytes); 
try { 
    outputStream = new FileOutputStream(new File("rute\\output.PNG")); 
    int read = 0; 
    byte[] bytes = new byte[1024]; 

    while ((read = inputStream.read(bytes)) != -1) { 
     outputStream.write(bytes, 0, read); 
    } 
    outputStream.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
inputStream.close(); 

Si vous me demandez pourquoi convertir en octets et écrire à partir de ce formulaire, parce que je dois faire quelque chose avec les données, et j'ai besoin de cette conversion. Si vous me dites que je ne peux pas charger une image sur une chaîne, oui je peux faire quelque chose comme ça:

File fil = ~~~~; 
FileInputStream fis = null; 
fis = new FileInputStream(fil); 
byte[] bytess = IOUtils.toByteArray(fis); 

Mais je ne veux pas le faire de cette façon parce que si je veux charger de gros fichiers, la taille du tas Cela ne suffit pas et cela pourrait être résolu par la "ligne par ligne" lue.

Merci pour vos réponses

+0

quelle est la question? –

+0

Comment je peux lire et écrire le fichier sans le changer, ou quel est le problème/raison pour laquelle le fichier de sortie n'est pas le même que l'entrée? –

Répondre

2

Je recommanderai lire this question avant. Puisque vous lisez des données binaires dans une chaîne, vous modifiez le codage de ces données. Donc, la sortie sera différente.

La meilleure approche consiste à lire les fichiers binaires sous forme de tableaux d'octets. Mais je vais dépendre de quel type de transformation/édition/changements que vous devez faire avec eux.

MISE À JOUR

Et, bien sûr, vous modifiez votre contenu avant d'écrire

while ((line= br.readLine()) != null) { 
    content += line + "\n"; 
} 

de sorte que le fichier de sortie sera différent toujours.

MISE À JOUR 2

Puisque la question/problème est de savoir comment lire un grand fichier binaire, google est généralement votre ami. Ou vous pouvez vérifier cet autre question

+0

Mais si je lis comme tableau d'octets, j'ai besoin de charger le fichier entier dans un tableau ne pas? Je fais la ligne par ligne parce que je peux diviser le fichier original et ne pas surcharger le tas –

+1

@AlejandroPicosPrieto Qu'est-ce qu'une "ligne" dans le contexte d'un fichier binaire? – glglgl

+0

@AlejandroPicosPrieto Pourquoi devriez-vous en avoir besoin pour lire un bloc? Vous pouvez toujours utiliser https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html#read (byte []) ou https://docs.oracle.com/javase/8 /docs/api/java/io/InputStream.html#read(byte[],%20int,%20int). – glglgl