Convertendo qualquer object em uma matriz de bytes em java DoCow
bytearray java serialização
initializer_list e move semântica Como as sessões funcionam no Express.js com o Node.js? Por que os compiladores C e C ++ permitem comprimentos de array em assinaturas de function quando elas nunca são aplicadas? srand () – por que ligar apenas uma vez? Executar script após atraso específico usando JavaScript ElasticSearch replicação de outros dados do sistema? Como definir o tempo limite da session no web.config Selecione o valor máximo de cada grupo Qual é a diferença entre float e double? Quando e por que preciso usar cin.ignore () em C ++? Como adicionar formas no LineChart do JavaFX Qual a diferença entre as funções RANK () e DENSE_RANK () no oracle? Não foi possível carregar o arquivo ou a assembly HRESULT: 0x80131515 (Ao adicionar o controlador ao projeto MVC que possui referências de assembly na unidade de rede) Jackson superando ressalta em favor do caso de camelo Fechar um aplicativo WP7 programaticamente?
Eu tenho um object do tipo X que eu quero converter em array de bytes antes de enviá-lo para armazenar no S3. Alguém pode me dizer como fazer isso? Eu aprecio sua ajuda.
Como faço para modificar dados de formulário serializados no jQuery?
GSON desserializando valor-chave para object personalizado
O que você quer fazer é chamado de " serialização ". Existem várias maneiras de fazê-lo, mas se você não precisar de nada sofisticado, acho que usar a serialização padrão de objects Java funcionaria muito bem.
Talvez você possa usar algo assim?
package com.example; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class Serializer { public static byte[] serialize(Object obj) throws IOException { try(ByteArrayOutputStream b = new ByteArrayOutputStream()){ try(ObjectOutputStream o = new ObjectOutputStream(b)){ o.writeObject(obj); } return b.toByteArray(); } } public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException { try(ByteArrayInputStream b = new ByteArrayInputStream(bytes)){ try(ObjectInputStream o = new ObjectInputStream(b)){ return o.readObject(); } } } }
Existem várias melhorias para isso que podem ser feitas. Não é de forma alguma o fato de que você só pode ler / escrever um object por matriz de bytes, que pode ou não ser o que você deseja.
Observe que "somente objects que suportam a interface java.io.Serializable podem ser gravados em streams" (consulte java.io.ObjectOutputStream ).
Como você pode se deparar com isso, a alocação e o redimensionamento contínuos do java.io.ByteArrayOutputStream podem se tornar bastante comuns. Dependendo do seu modelo de segmentação, você pode considerar a possibilidade de reutilizar alguns dos objects.
Para serialização de objects que não implementam a interface Serializable , você precisa escrever seu próprio serializador, por exemplo, usando os methods read * / write * de java.io.DataOutputStream e os methods get * / put * de java.nio.ByteBuffer talvez junto com a reflection, ou puxe uma dependência de terceiros.
Este site tem uma lista e comparação de desempenho de algumas estruturas de serialização. Olhando para as APIs, parece que Kryo pode se encheckboxr no que você precisa.
Use serialize e deserialize methods em SerializationUtils de commons-lang .
Sim. Apenas use serialização binária . Você tem que ter cada object usado para implements Serializable mas é simples a partir daí.
Sua outra opção, se você quiser evitar a implementação da interface Serializable, é usar reflection e ler e gravar dados em / de um buffer usando um processo abaixo:
/** * Sets all int fields in an object to 0. * * @param obj The object to operate on. * * @throws RuntimeException If there is a reflection problem. */ public static void initPublicIntFields(final Object obj) { try { Field[] fields = obj.getClass().getFields(); for (int idx = 0; idx < fields.length; idx++) { if (fields[idx].getType() == int.class) { fields[idx].setInt(obj, 0); } } } catch (final IllegalAccessException ex) { throw new RuntimeException(ex); } }
Como eu mencionei em outras questões semelhantes, você pode querer considerar a compactação dos dados, pois a serialização padrão do java é um pouco detalhada. você faz isso colocando um GZIPInput / OutputStream entre os streams Object e os Byte.
Para converter o object em uma matriz de bytes, use o conceito de Serialization and De-serialization .
A conversão completa da matriz de object para byte explicada em é tutorial.
Q. How can we convert object into byte array? Q. How can we serialize a object? Q. How can we De-serialize a object? Q. What is the need of serialization and de-serialization?