2016-04-15 2 views
1

Так что я делаю проект для школы, где мне нужно читать в двоичном файле данных и использовать его для создания характеристик, таких как сила и мудрость, для персонажей. Он настроен так, что первые 8 бит составляют один стат.Как читать в двоичных файлах данных в java

Мне было интересно, что такое синтаксис для этого. Это похоже на чтение текстовых файлов, например.

File file = new File("CharacterStats.dat"); 
Scanner inputScanner = new Scanner(file); 

inputScanner.next(); 

ответ

3

Вместо сканера вы бы использовать что-то вроде этого:

File file = new File("CharacterStats.dat"); 
FileInputStream fis = new FileInputStream(file); 
ObjectInputStream ois = new ObjectInputStream(fis); 
YourClass object = (YourClass) ois.readObject(); 

Если третья линия вы создаете новый объект из потока, и приведения его к объекту вы хотите. Вы должны сделать это, потому что java не может знать, какой объект читается.

EDIT: Это для чтения в двоичных данных в виде сериализованных объектов. Возможно, я неправильно истолковал ваш вопрос, поскольку ваши «статистики» являются объектами.

+0

Спасибо. Но теперь, как я могу получить доступ ко всем тем и нулям, чтобы использовать их. Извините, но у меня действительно есть только опыт чтения текстовых файлов. – Ionterac

+0

У вас нет. это то, что делает метод readObject() объекта ObjectInputStream для вас. Он интерпретирует двоичный файл из текстового файла как объект Java. Тем не менее, вам нужно сообщить компилятору, какой ** вид ** объекта он действительно есть, что вы делаете путем кастинга. –

+0

Так что, если я произведу его как int, он автоматически преобразует 010010 в 18? Извините за то, что вы задали так много вопросов, которые вам очень помогают. – Ionterac

3

Если вы используете JDK 7+ самый простой способ будет:

Path path = Paths.get("CharacterStats.dat"); 
byte[] fileContents = Files.readAllBytes(path); 

А потом делать с этим массивом, что вы хотите.

Поскольку байт включает 8 бит, вы можете получить доступ к первым 8 бит на fileContents[0], а затем, вероятно, управлять потоком вашей программы с помощью bitwise operations.

1
String fileChar; 
FileReader fileReader = new FileReader("read_data_file.dat"); 
BufferedReader bufferReader = new BufferedReader(fileReader); 

while((fileChar = bufferReader.readLine()) != null){ 
    System.out.print(fileChar); 
} 

bufferReader.close(); 

FileReader используется для получения файла и передать объект считывания файла в BufferedReader, а затем распечатать файлы, пока нуль не нашел (EOF - Конец файла встречи)

+0

Это делает текст IO. Речь идет о чтении двоичных данных. – Functino