2016-03-10 63 views
1

我有一個問題....2D陣列爲int(種子)和背面

在這裏,我們得到了一個2D字節數組:

字節[] [] = duengonMap新的字節[500] [ 500];

因爲我想把它從客戶端發送到服務器或反過來,我需要把它放到一個int/long。從服務器將發送到其他連接的客戶端,在那裏它將轉換回2d陣列。聽起來很簡單......但我該怎麼做?

我想類似的東西:

int[][] twoD = new int[][] { new int[] { 1, 2 }, 
     new int[] { 3, 4 } }; 

int[][] newTwoD = null; // will deserialize to this 

System.out.println("Before serialization"); 
for (int[] arr : twoD) { 
    for (int val : arr) { 
     System.out.println(val); 
    } 
} 

try { 
    FileOutputStream fos = new FileOutputStream("test.dat"); 
    ObjectOutputStream oos = new ObjectOutputStream(fos); 
    oos.writeObject(twoD); 

    FileInputStream fis = new FileInputStream("test.dat"); 
    ObjectInputStream iis = new ObjectInputStream(fis); 
    newTwoD = (int[][]) iis.readObject(); 

} catch (Exception e) { 

} 

System.out.println("After serialization"); 
for (int[] arr : newTwoD) { 
    for (int val : arr) { 
     System.out.println(val); 
    } 
} 
} 

它僅被轉換爲「文件」也許我這樣做不對, 但我不知道如何將它轉換爲int或長... 任何想法?還是例子?

+0

爲什麼你認爲你需要轉換爲int? 'byte [] []'是一個對象;所以你可以直接發送它;使用'writeObject()'。或者我在這裏錯過了什麼? – GhostCat

+0

是的,因爲我使用Kryonet,沒有提到。在那裏你不能發送字節[] []或大對象通過udp或tcp,比服務器將崩潰:/ – genaray

+0

沒有人得到一個解決方案? – genaray

回答

0

您可以一個一個地使用循環發送所有值的同時,讀取它們的服務器/客戶端上,並安排他們返回到一個數組

+0

感謝您的回答:)這可行,但如果您想分享您的地圖呢?那麼你需要一顆種子。此外,它導致服務器和客戶端之間的很多流量:/ – genaray

0

基本上,有兩個問題需要解決。

1)如何將一個字節變成一個int,反之亦然......這是非常簡單的,並且在這裏可能被無數次回答。 請參閱here fore example

2)現在,您知道如何發送一個字節/整數...您唯一要做的事情就是定義您想要遍歷數組的順序。含義:你遍歷你的字節數組,發送每個字節爲int;另一方面,讀取int值,並使用相同的遍歷算法填充字節數組。

當然,最簡單的解決方案將嵌套for循環;但取決於你的數據;您可能會發現其他想法很有用。例如:如果你的字節數組包含很多0值......你可能決定只傳送非0值(比如發送一個由索引+值組成的對)。

+0

感謝您的快速回復:)我只看了一個例子...這隻適用於1D字節數組或2D呢?我也看到,它在int中只放了一個值......但是如何將整個2D數組放入它呢? OO多數民衆贊成在一個好主意,只發送非0值...只是試過但不工作,我的地圖似乎是很大:( – genaray

+0

對不起,請閱讀我的答案。你TRAVERSE你的數組,然後你發送單個字節作爲int。你確定你發送的數據太多了嗎?從你提出的方式來看,這似乎更有可能,你的實現被破壞了**,因此它不起作用。從這個意義上說:打開一個一個新的問題,發佈你的代碼,包括你遇到的錯誤的完整描述。換句話說:是什麼讓你認爲你正在達到「數據量」的限制? – GhostCat

+0

好吧,現在我明白了,試試看,爲什麼沒有任何圖書館的?:)沒有我的實現沒有破,因爲一切正常,只有我傳輸字節[] []的部分是... ...我沒有得到任何錯誤消息,服務器只是關閉,沒有任何異常 – genaray