2016-09-07 17 views
6

Tôi có câu hỏi sau:Chuyển đổi Bất kỳ loại nào trong scala thành Array [Byte] và quay lại

Tôi có giá trị biến trong chương trình được khai báo là Giá trị bất kỳ.

Tôi muốn chuyển đổi giá trị này sang Byte Array ..

Tôi có thể tuần tự hóa thành mảng byte và ngược lại như thế nào? Tôi tìm thấy các ví dụ liên quan đến các loại khác như Double hoặc Int, nhưng không phải là Bất kỳ.

+0

Làm thế nào bạn có thể serialize một cái gì đó khi bạn không biết nó là gì? –

+0

Tôi có cùng một câu hỏi .. Nó là một đầu vào từ một người dùng, nó có thể là hình ảnh, số, chuỗi .. và sau đó tôi cần phải chuyển đổi nó thành Array [Byte] để tôi có thể lưu nó vào DB – Ectoras

+0

Nếu nó là một đầu vào từ người dùng, sau đó nó đã là một 'String', phải không? Vậy tại sao không chỉ lưu trữ 'Chuỗi'? –

Trả lời

8

Điều này sẽ làm những gì bạn cần. Nó khá giống với cách người ta làm điều đó trong Java.

import java.io.{ByteArrayInputStream, ByteArrayOutputStream, ObjectInputStream, ObjectOutputStream} 

object Serialization extends App { 

    def serialise(value: Any): Array[Byte] = { 
    val stream: ByteArrayOutputStream = new ByteArrayOutputStream() 
    val oos = new ObjectOutputStream(stream) 
    oos.writeObject(value) 
    oos.close 
    stream.toByteArray 
    } 

    def deserialise(bytes: Array[Byte]): Any = { 
    val ois = new ObjectInputStream(new ByteArrayInputStream(bytes)) 
    val value = ois.readObject 
    ois.close 
    value 
    } 

    println(deserialise(serialise("My Test"))) 
    println(deserialise(serialise(List(1)))) 
    println(deserialise(serialise(Map(1 -> 2)))) 
    println(deserialise(serialise(1))) 
} 
+0

Cảm ơn bạn rất nhiều công trình này. Tôi cũng tìm thấy những điều sau đây .. sự khác biệt với giải pháp của bạn là gì? – Ectoras

-2
def anyTypeToByteArray(value: Any): Array[Byte] = { 
    val valueConverted :Array[Byte] = SerializationUtils.serialize(value.isInstanceOf[Serializable]) 
    valueConverted 
    } 

    def ByteArrayToAny(value: Array[Byte]): Any = { 
    val valueConverted: Any = SerializationUtils.deserialize(value) 
    valueConverted 
    } 
+0

Bạn sử dụng thư viện của bên thứ ba. –

+0

Như JasperM đã đề cập, điều này sử dụng Apache commons. Ngoài ra một giải pháp khả thi nếu bạn sẵn sàng mang nó vào. –

+0

nhờ gus để được giúp đỡ của bạn! – Ectoras

Các vấn đề liên quan