Groovy을 사용하여 byte []를 Object로 변환하려고합니다. 바이트 배열로 표현되는 실제 Groovy 클래스는 Serializable 인터페이스를 구현하며 별도의 Groovy 클래스 파일에 저장됩니다. 그러나 내 toObject
함수를 호출하려고 할 때 항상이 클래스의 ClassNotFoundException
을 얻습니다. 내 코드는 Java로 작성되었으며 Java를 사용할 때는 작동하지만 Groovy를 사용할 때는 작동하지 않습니다.Groovy에서 byte []를 Object로 또는 그 반대로 변환하는 방법
private static byte[] toByteArray(Object obj) {
byte[] bytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
oos.close();
bos.close();
bytes = bos.toByteArray();
} catch (Exception ex) {
ex.printStackTrace();
}
return bytes;
}
private static Object toObject(byte[] bytes) {
Object obj = null;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
obj = ois.readObject();
} catch (Exception ex) {
ex.printStackTrace(); // ClassNotFoundException
}
return obj;
}
이렇게하는 가장 좋은 방법은 무엇입니까?
편집 :
public class MyItem implements Serializable {
/**
*
*/
private static final long serialVersionUID = -615551050422222952L;
public String text
MyItem() {
this.text = ""
}
}
그런 다음 모든 것을 테스트 :
void test() {
MyItem item1 = new MyItem()
item1.text = "bla"
byte[] bytes = toByteArray(item1) // works
Object o = toObject(bytes) // ClassNotFoundException: MyItem
MyItem item2 = (MyItem) o
System.out.print(item.text + " <--> " + item2.text)
}
별도의 Groovy 클래스 파일에 저장되었다고 할 때 groovyc 또는 다른 .groovy 파일로 컴파일 된 실제 .class 파일을 의미합니까? 귀하의 예제는 나를 위해 작성된 것처럼 작동하지만, Serializable 클래스를 정의하는 소스 파일을 컴파일하는 경우에만 해당됩니다. –
이것은 다소 혼란 스럽습니다. ClassNotFoundException의 타겟은 어떤 클래스입니까? 그 수업은 컴파일 된거야? 그것은 classpath에 있습니까? –
@JustinPiper 별도의 .growovy 파일 – IHeartAndroid