Возможно ли получить доступ к объектам случайным образом в Java? - PullRequest
0 голосов
/ 13 мая 2011

в основном у меня есть файл String Objects.Я использовал Java ObjectOutputStream для хранения объектов.Можно ли получить доступ к объектам (строкам) случайным образом, скажем, если я хочу получить доступ к 11-му объекту, я мог бы просто каким-то образом перейти к этому месту, не используя readObject () 11-й раз, чтобы выполнить цикл к этому месту,И если бы я хотел отскочить назад, я мог бы сделать это также, без необходимости повторения с самого начала.Благодарю.

Как предполагается, я думаю, что могу каким-то образом использовать метод skipBytes () для реализации некоторого произвольного доступа.Хотя я не могу гарантировать, что мой объект имеет фиксированный размер, но что, если я могу сохранить массив позиций этих объектов в файле, я мог бы просто использовать этот массив в качестве индекса и skipBytes () для произвольного доступа.Таким образом, проблема остается, во всяком случае, я мог знать размер объектов, когда я на самом деле пишу их, чтобы я мог как-то записать положение?

Ответы [ 4 ]

1 голос
/ 13 мая 2011

Использование ObjectOutputStream для хранения объектов String является излишним.Вы уже подумали об использовании индекса стартовых позиций.Тогда почему бы не сохранить строки непосредственно в файле с помощью FileOutputStream - либо обернуть его в OutputStringWriter с использованием кодировки фиксированной длины (где число байтов == длина строки, возможно * 2), либо использовать toBytes(encoding) для каждой строки отдельно и запишите длину получаемых байтовых массивов.

1 голос
/ 13 мая 2011

Это невозможно с ObjectInputStream, если вам нужен произвольный доступ, вам нужно будет прочитать все объекты в коллекцию / массив, который сначала поддерживает произвольный доступ.

1 голос
/ 13 мая 2011

Единственный способ сделать это - хранить объекты отдельно в их собственных потоках, либо в одном и том же файле, либо в разных файлах.

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

0 голосов
/ 13 мая 2011

Сам ObjectOutputStream не может этого сделать, потому что, во-первых, он не может знать размер объектов в этом файле;на самом деле, он даже не может знать, что объекты относятся к одному и тому же типу.

Если вы точно знаете, что объекты имеют фиксированный размер, и вы знаете этот размер, вы можете использоватьskipBytes() метод - но я сильно сомневаюсь, что вы действительно это знаете.


РЕДАКТИРОВАТЬ: Спасибо за то, что приняли мой ответ, но (просто проясните ситуацию): я намеревался показать один из способов может быть сделано с учетом требований, которые вы упомянули, но это не совсем то, что должно быть сделано , по моему мнению.:)

...