ID do artigo: 178561 - Última revisão: quarta-feira, 14 de junho de 2006 - Revisão: 5.0

Como usar a serialização Java com SafeArrays Variant

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sumário

Variant SafeArrays são usados em COM para matrizes de dados (bytes, ints, etc.). Talvez seja útil para um desenvolvedor Java usar um SafeArray para um objeto Java persistir. Em ordem para fazer isso, precisamos uma maneira de converter os dados de ObjectOutputStream para um SafeArray e voltar novamente.

Mais Informações

Serialização em Java permite que você a transmitir ou armazenar um objeto Java em um transmitir. Se você deseja usar a serialização com objetos COM, será necessário para converter a transmitir Java para alguns forma que entende COM. Comum the Most forma de parâmetro em COM é um Variant.

Pois uma Variant possui limitado tipos que podem ser colocados dentro dele, um serializado transmitir do objeto Java deve ser convertido para um SafeArray. Um SafeArray pode conter uma coleção de bytes que é que um serializado objeto Java consiste. Representação do Java de um SafeArray é com.ms.com.SafeArray. Precisamos criar uma classe simples para converter o OutputStream para o SafeArray e outra classe para converter o SafeArray voltar para um InputStream.

Observação : em ordem para compilação a seguinte codificar, você deve usar a máquina virtual para Java versão 2339 ou mais recente do Microsoft SDK para Java 2.0 e posterior. O seguinte codificar depende dos novos recursos da classe SafeArray incluído o novo Virtual Machine.

A seguinte classe chamado SafeArrayOutputStream converte dados provenientes de um OutputStream em um SafeArray:
import java.io.*;
import java.util.*;
import com.ms.com.*;

// SafeArrayOutputStream
public class SafeArrayOutputStream extends ByteArrayOutputStream
{
   public SafeArray getSafeArray()
   {
      // Allocate an array the size of the vector
      byte[] byteArray = toByteArray();

      // Create the safearray
      SafeArray array = new SafeArray(Variant.VariantByte,
         byteArray.length);

      // Fill in safearray
      array.setBytes(0, byteArray.length, byteArray, 0);

      return array;
  }
}
				
A seguinte classe chamado SafeArrayInputStream converte dados de um SafeArray em um InputStream:
import java.io.*;
import com.ms.com.*;

// SafeArrayInputStream
public class SafeArrayInputStream extends ByteArrayInputStream
{
   public SafeArrayInputStream(SafeArray array)
   {
      super(array.toByteArray());
   }
}
				
Observe que ambos os essas classes estender classes que estão em Java.IO o pacote. O ByteArrayOutputStream e o ByteArrayInputStream já fornecem a maioria da funcionalidade necessária para a conversão.

Se você tiver o seguinte interface COM automação:
interface IShortStorage
{
   public void setAppData(Variant v);
   public Variant getAppData();
}
				
Você deve ser capaz de usá-los no seguinte maneira:
// This is our variable that contains the COM interface
IShortStorage istor = (IShortStorage) storageCOMObject;

// This is our Object that we want to store
Color color = new Color(255,0,128);

// Create our SafeArrayOutputStream
SafeArrayOutputStream safeOutStream = new SafeArrayOutputStream();

// Declare a ObjectOutputStream for Serialization
ObjectOutputStream objOutStream = null;
try
{
   // Create the ObjectOutputStream passing in our SafeArrayOutputStream
   objOutStream = new ObjectOutputStream(safeOutStream);

   // Write our color object to the stream
   objOutStream.writeObject(color);

   // Flush the stream
   objOutStream.flush();
}
catch(Exception e)
{
   // ObjectOutputStream threw an exception
}

// Close the stream
safeOutStream.close();

// Get the SafeArray from our SafeArrayOutputStream
SafeArray bytes = safeOutStream.getSafeArray();

// Create a new Variant to hold the SafeArray
Variant data = new Variant();

// Put the SafeArray inside the Variant
data.putSafeArray ( bytes );

// Store the Variant inside the Automation Object
istor.setAppData(data);
				
Quando você estiver pronto para retieve o objeto, utilizar este codificar para desserializar o objeto do SafeArrayInputStream:
// Get the Variant back from the Automation Object
Variant data = istor.getAppData();

// Get the SafeArray out of the Variant
SafeArray bytes = body.toSafeArray();

// Create a new SafeArrayInputStream based on the SafeArray
SafeArrayInputStream safeInStream = new SafeArrayInputStream(bytes);

// Create a ObjectInputStream based on the SafeArrayInputStream
ObjectInputStream objInStream = new ObjectInputStream(safeInStream);

// Get the serialized object out of the ObjectInputStream
Object obj = objInStream.readObject();

// Check to see if the object is a color
if(obj instanceof Color)
{
   Color col = (Color)obj;
   // Use the color
}
				

Referências

SafeArrays e Variants são descritas no Microsoft SDK para documentação Java que é disponível a partir do seguinte site:
http://www.microsoft.com/mscorp/java/ (http://www.microsoft.com/mscorp/java/)
Para informações suporte sobre Visual J++ e o SDK para Java, visite o seguinte site da Microsoft:
http://www.microsoft.com/java (http://www.microsoft.com/java)

A informação contida neste artigo aplica-se a:
  • Microsoft Software Development Kit for Java 2.02
  • Microsoft Software Development Kit for Java 3.2
  • Microsoft Software Development Kit for Java 2.01
  • Microsoft Software Development Kit for Java 2.02
  • Microsoft Software Development Kit for Java 3.0
  • Microsoft Software Development Kit for Java 3.1
  • Microsoft Java Virtual Machine
Palavras-chave: 
kbhowto kbfaq kbcode kbjavafaq KB178561 KbMtpt kbmt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Caso tenha encontrado erros neste artigo e queira colaborar no processo de aperfeiçoamento desta ferramenta, por favor preencha o formulário existente na parte inferior desta página. Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 178561  (http://support.microsoft.com/kb/178561/en-us/ )