2015-04-12 5 views
-1

Я хочу сохранить различные файлы в файл. В настоящее время я использую DataOutputStream. Сначала я сохраняю массив шорт, затем я сохраняю еще один массив шорт, тогда я хочу сохранить массив longs. Проблема в том, что когда я читаю файл, я не знаю, сколько шорт я сохранил. Я не знаю, насколько большой первый короткий массив.Сохраните различные переменные в файле

Я мог бы решить это, указав значение, которое сообщит мне, когда короткий массив остановится. Например, я говорю, что значение -99999 говорит мне, когда массив закончился. Но есть небольшой шанс, что короткий массив содержит значение -99999 до его окончания.

Есть ли способ создания меток? Или мне нужно создавать разные файлы для каждого массива?

+2

Ну, если это только цифры, которые вам нужно разграничить, я бы сказал, что хорошая ставка для разделителя будет буквой. – christopher

+0

@Alex Да, это решает мою проблему, LOL. Спасибо, извините за глупый вопрос :), напишите свой комментарий как ответ, тогда я могу закрыть это, или мне просто удалить вопрос? – Alexanus

+1

Почему бы вам не сохранить это в простом анализе, стандартном формате, таком как JSON или XML, а не придумывать свой собственный формат? –

ответ

0

Прочитайте длину массива, а затем прочитал, что многие элементы

2

Вы должны сначала написать длину массива, за которой следует массив, таким образом вы узнаете, сколько предметов нужно читать.

-2

Вы можете использовать эту

Запись:

short[] shorts1 = ...; //an array 
short[] shorts2 = ...; //another array 
long[] longs = ...; //another array 
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("the filename"))) { 
    out.writeObject(shorts1); 
    out.writeObject(shorts2); 
    out.writeObject(longs); 
    out.flush(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

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


Reading:

short[] shorts1; 
short[] shorts2; 
long[] longs; 
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("the filename"))) { 
    shorts1 = (short[])in.readObject(); 
    shorts2 = (short[])in.readObject(); 
    longs = (long[])in.readObject(); 
} catch (IOException | ClassNotFoundException e) { 
    e.printStackTrace(); 
} 

Этот код считывает два отдельных коротких массивов и длинный массив из файла, в котором они написаны.

+0

@jenzz Да, это так, используйте ObjectOutputStream.writeObject (someArray) – SWdV

+0

Итак, почему голос? – SWdV

+0

Пожалуйста, добавьте объяснение, почему это решает проблему OP, которая связана с чтением, а не с записью объектов. –