RandomAccessFile em java

Olá amigos, boa tarde.
Surgiu em um aplicativo que eu estou fazendo, a necessidade de se gravar objetos da API do java em um arquivo de acesso aleatório(tamanho fixo), ou seja, aquele arquivo que não necessita de uma leitura de todos os registros anteriores para se ler determinado registro.
No entanto os métodos dessa classe só possibilitam a escrita e leitura de tipos primitivos, no máximo, permitindo utilizar strings.
Em C++, eu poderia utilizar “reinterpreit_cast<const char*> objeto”(realizando uma coerção de ponteiro) e conseguiria salvar utilizando a classe ofstream. No entanto em java isso não é possível.
Alguém poderia me ajudar a resolver esse problema?

O que você deseja fazer é gravar um determinado objeto com um estado qualquer em um arquivo (Serializado)? E depois, quando desejar quer resgatar este objeto com o estado que o mesmo se encontrava?

Se for isto você deve utilizar a classe java.io.ObjectOutputStream

Exemplo

[code]import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class SerializacaoDat {

public static void main(String[] args) throws Exception {
	
	File file = new java.io.File("c:/arq.dat");
	
	// serializa um objeto em disco
	ArrayList&lt;String&gt; list = new ArrayList&lt;String&gt;();
	list.add("NOME");
	list.add("SOBRENOME");
	
	FileOutputStream fGravar = new FileOutputStream(file);
	ObjectOutputStream sGravar = new ObjectOutputStream(fGravar);
	sGravar.writeObject(list);
	sGravar.flush();
	System.out.println("Objeto gravado com sucesso!");

	// deserializa, retorna o objeto do disco e apresenta os valores
	FileInputStream fLer = new FileInputStream(file);
	ObjectInputStream sLer = new ObjectInputStream(fLer);
	ArrayList&lt;String&gt; listRead = (ArrayList&lt;String&gt;) sLer.readObject();

	if (listRead != null) {
		for (String str : listRead) {
			System.out.println(&quot;--&gt;&gt; &quot; + str);
		}
	}
}

}
[/code]

Complementando.

Lembrando que para que uma classe possa ser gravada em disco a mesma deve implementar a interface java.io.Serializable.

Um abraço.

Obrigado pela resposta amigo, mas não era exatamente isso que eu desejo não…
Ao implementar o código da seguinte maneira, cria-se um arquivo de acesso sequencial, que funciona p/ o que eu desejo fazer, mas é muito ineficiente pois percorre todo o arquivo até encontrar o registro desejado, e como o arquivo será muito grande, isso não é muto aceitável, pois requer muito tempo de busca p/ um registro…
Nesse caso, como o vetor seria muito grande, não seria nada eficiente essa implementação, porque assim toda hora que somente um registro do arquivo fosse necessário, iria-se carregar o que coubesse do vetor na memória disponível…
Abraços.

Helder, em java existe a classe java.io.RandomAccessFile que tem o método que você tanto deseja o seek();

Dá uma olhada em:

http://www.inf.ufrgs.br/procpar/disc/inf01008/trabalhos/sem01-1/t2/PDPT2Claus/Performance_JavaIO.htm