2013-09-22 1 views
1

Я хочу написать строку/данные Char как байты в файле. Мне нужно, чтобы это преобразование происходило внутри класса IO. *. Я не хочу использовать метод getBytes() для строки.File Write: String to Bytes

Я пробовал следующие две программы, но оба записывают данные как символ. И когда я открываю файл в блокноте, я могу прочитать эти символы. Как я могу хранить свои данные в виде байтов?

 import IO.FileWrite; 

     import java.io.*; 

     public class CharToChar { 

private final String data; 

public CharToChar(String data){ 
    this.data = data; 
} 

public static void main(String[] args) throws IOException { 
    final CharToChar charToChar = new CharToChar("I am Manish"); 
    charToChar.write(); 
} 

private void write() throws IOException { 
    final File file = new File("CharToChar.txt"); 
    final FileWriter fileWriter = new FileWriter(file); 
    final BufferedWriter bufferdWriter = new BufferedWriter(fileWriter); 
    bufferdWriter.write(this.data); 
    bufferdWriter.close(); 

} 
    } 


    import java.io.DataOutputStream; 
    import java.io.FileOutputStream; 
     import java.io.IOException; 

     public class WriteStringAsBytesToFile { 

public static void main(String[] args) { 

    String strFilePath = "WriteStringAsBytes.txt"; 

    try 
    { 
     //create FileOutputStream object 
     FileOutputStream fos = new FileOutputStream(strFilePath); 

    /* 
    * To create DataOutputStream object from FileOutputStream use, 
    * DataOutputStream(OutputStream os) constructor. 
    * 
    */ 

     DataOutputStream dos = new DataOutputStream(fos); 

     String str = "This string will be written to file as sequence of bytes!"; 

    /* 
    * To write a string as a sequence of bytes to a file, use 
    * void writeBytes(String str) method of Java DataOutputStream class. 
    * 
    * This method writes string as a sequence of bytes to underlying output 
    * stream (Each character's high eight bits are discarded first). 
    */ 

     dos.writeBytes(str); 

    /* 
    * To close DataOutputStream use, 
    * void close() method. 
    * 
    */ 

     dos.close(); 

    } 
    catch (IOException e) 
    { 
     System.out.println("IOException : " + e); 
    } 

} 
    } 

Примечание -> JAVA Docs говорит OutputStreamWriter OutputStreamWriter является мостом от символьных потоков до потоков байтов: * Символы, записанные на нем кодируются в байты, используя заданный.

ответ

4

Я думаю, что у вас неправильное представление о написании байтов/символов. Символы - это просто представления байтовых данных. Это представление определяется на основе типа Character Encoding. Посмотрите на следующий код:

OutputStream os = new FileOutputStream(filePath); 
    os.write("This is byte date".getBytes("UTF-8")); 
    os.close(); 

Если открыть файл после выполнения выше фрагмента кода, вы увидите ту же строку в файле. У вашего файла всегда есть данные в байтах. Байты считываются текстовым редактором и кодируются на основе кодировки по умолчанию, обычно UTF-8, но не всегда.

0

Не уверен, что если какой-либо из классов Java IO может сделать это, и я вижу, что вы не хотите использовать getBytes(), но если вы решите пойти getBytes() путь, то вы можете изменить ваш метод write() в первом примере к чему-то вроде этого:

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.util.Arrays; 
import java.util.Arrays; 

public class CharToChar { 

    private final String data; 

    public CharToChar(String data){ 
     this.data = data; 
    } 

    private void write() throws IOException {  
     OutputStream fos = new FileOutputStream(new File("CharToChar.txt")); 
     fos.write(Arrays.toString(this.data.getBytes()).getBytes()); 
     fos.close(); 
    } 

    public static void main(String[] args) throws IOException { 
     final CharToChar charToChar = new CharToChar("I am Manish"); 
     charToChar.write(); 
    } 
} 
0

Ваше требование кажется довольно странным, как преобразование строки в байтах является работа в toBytes метода, который вы не хотите использовать .... но вы можете сериализовать любой объект Java, включая строки, затем сохраните его в файле следующим образом:

try (ObjectOutputStream oos = new ObjectOutputStream(
      new FileOutputStream("CharToChar.txt"))) { 
     // write any object to a file 
     oos.writeObject("I am Manish"); 
     // another option, works for Strings and makes the String pretty much un-readable 
     oos.writeBytes("hello world"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
+0

Что такое OutputStreamWriter и InputStreamReader? Я прочитал эти классы, которые используются как адаптеры для Char to Byte. – HakunaMatata

+0

OutputStreamWriter используется для записи символов в поток с использованием определенной кодировки символов. То же самое для InputStreamReader, но для чтения ... ObjectOutputStream (который я использовал выше) не заботится о кодировании, см. Http://docs.oracle.com/javase/1.4.2/docs/api/java/io/DataOutput .html # writeByte (int) для того, как символы преобразуются в байты. Вы просто используете подкласс класса DataInput для чтения символов, написанных с помощью DataOutput. – Renato