作者aynmeow (傻瓜 我們不一樣)
看板java
標題[問題] Serialize class然後傳輸的問題
時間Thu Oct 15 15:56:59 2015
菜逼八問個問題
1. 我先在 package 1 做一個
public class test003t implements Serializable{
private static final long serialVersionUID = -4844268319117569860L;
int b = 10;
}
2. 在 package 2 複製一個一模一樣的test003t
3. 並把package 2 的 test003t 轉成 byte[]
傳給 package 1 的main method
在main method 把byte[]轉回來成為object
結果下面這行出錯了
test003t temp = (test003t) object1;
java.lang.ClassCastException: p003.test003t cannot be cast to p002.test003t
at p002.test001objectdencode.main(test001objectdencode.java:51)
4. 我去把package 1跟package 2 裡面的test003t都轉成byte[]
內容全部印出來 是完全一樣的
既然如此為什麼不能用?
怕我敘述能力太差..
總之就是我在兩個不同的package1 package2 都做出同名同內容的class
接著把兩個class當成object轉成byte[] (印出來的值都是一樣的
在package1裡面要把package2傳過來的byte[]轉回class就出錯
但是如果是轉同package的就不會錯
為什麼...不是內容都一樣嗎?
====抱歉犯蠢了=======
後來仔細比對有一個數字不一樣 所以認定的package name不一樣就不行
那要怎麼做才能一樣呢?
--
驟雨初歇村似畫 濛濛夕霧滿秋山
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.38.253.21
※ 文章網址: https://www.ptt.cc/bbs/java/M.1444895823.A.ED3.html
※ 編輯: aynmeow (114.38.253.21), 10/15/2015 16:15:52
推 Dnight: cast那邊改成 (p003.test003t) 看看 10/15 16:46
→ Dnight: 其實我不是很明白你要做什麼...先試試這個解法 10/15 16:46
我是希望如果有人從遠端(像是經過socket)傳給我一個class
我能夠在本地使用那個class
所以我的想法就是把class序列化 >> object轉byte[] >> 傳出去
>> 接收 >> byte[]轉object >> object指定為某class來使用
→ ssccg: 序列化本來就只能轉回同樣class的物件 10/15 17:14
→ ssccg: 要能轉回來顯然知道原本長怎樣,那為什麼不放在同package 10/15 17:15
因為要模擬從遠端傳輸...
最後找到method.invoke的寫法 大概可以解決了感恩
※ 編輯: aynmeow (114.38.253.21), 10/15/2015 17:28:18
→ qrtt1: 為什麼要這樣搞它@@ 10/15 18:02
推 luoqr: EJB? 10/15 20:07
推 longlongint: package不同就是不同名的物件 10/15 23:57
推 haha02: 類別前加上package名才是它真正的名字 名字不一樣嘗試轉 10/16 01:55
→ haha02: 型就錯了 10/16 01:55
→ ssccg: 遠端傳輸也可以用一樣的class啊,不懂在模擬什麼 10/16 05:41
→ ssccg: 模擬只告訴對方整個class結構,但就不告訴對方class name? 10/16 05:43