2012-05-12 163 views
0

我正在編寫一個應用程序,旨在集中所有與mysql數據庫中生成的項目管理相關的數據。字節或Int?通過套接字發送哪一個更快?

  • 服務器層:

充當多個客戶端之間的層和不斷連接到數據庫(MySQL的),應用程序可以在3份/項目,因爲它如下劃分。它監聽協議類,然後執行像INSERT,UPDATE,DELETE,SELECT等操作。它是用普通的java 2SE而不是2EE編寫的,因爲它是一個非常簡單的類,可以獨立於服務器。

  • 通訊協議:

延伸java.util.EventObject中和實現Serializable接口的類。它用於存儲與客戶端和服務器之間的公共協議相關的信息。這是實際「穿過」套接字的類,因爲它的工作類似協議。

  • 客戶端應用程序:

Basicaly的GUI。它是用javafx 2.1編寫的,旨在提供一個漂亮而美觀的界面來收集信息。

我的問題是,爲了提高可讀性通過代碼我已經在通信協議類上創建了一些靜態最終字段,然後聲明爲int,我想知道是否使用字節可以改善代碼,因爲(再次)它會通過插座旅行。我知道JVM會將等價空間分隔爲字節,短語和ints變量,但是在通過套接字發送數據時會發生這種情況嗎?因此,在這種情況下,哪一個更好:

/** 
* 
*/ 
private static final long serialVersionUID = 7530533341506425480L; 


public static final int CLIENT_DISCONNECTED = -1; 
public static final int NEW_INFO_INSERTED = 0; 
public static final int SHUTDOWN_ORDER = 1; 

public static final int INFO_NOT_INSERTED = 100; 

public static final int CLIENT_CONNECT = 10000; 
public static final int CLIENT_LOGIN = 10001; 

public static final int SERVER_LOGIN_OK = 20001; 
public static final int SERVER_LOGIN_FAILED = 20002; 
public static final int SERVER_SAYS = 20003; 
public static final int SERVER_IMAGE_INSERTED = 20004; 

public final static int DB_WORKERS = 1001; 
public final static int DB_PROJECTS = 1002; 
public final static int DB_SECTORS = 1003; 
public final static int DB_ACTIVITIES = 1004; 
public final static int DB_SUBACTIVITIES = 1005; 
public final static int DB_INSERTION = 1006; 
public final static int DB_REL_COST = 1007; 
public final static int DB_FUNCTIONS = 1008; 
public final static int DB_INSERTION_ID = 1009; 
public final static int DB_INSERTION_IMG = 1010; 

public final static int DB_WORKER_INSERTED = 4010; 
public final static int DB_ACTIVITY_INSERTED = 4011; 
public final static int DB_SECTOR_INSERTED = 4012; 
public final static int DB_SUBACTIVITY_INSERTED = 4013; 
public final static int DB_FUNCTION_INSERTED = 4014; 
public final static int DB_IMAGE_INSERTED = 4015; 
public final static int DB_PARENTS_INSERTED = 4016; 

或使用字節?歡呼聲

+1

評估這個問題的答案,首先至少40個字節的TCP報文段的開銷,如果您要發送單可以開始發揮作用時,應開銷考慮消息而不是流,以及序列化開銷。在這種情況下,您不太可能注意到四個字節的空間開銷,而不是一個消息類型標誌的開銷。 – EJP

回答

6

正如ColeJohnson所說,字節小於整數,因此在技術上更快發送。但是,除非您一次發送100,000或數百萬個這些值,否則的大小差異將不會影響

+0

那麼,我決定把所有東西都改爲byte,因爲每個事件都被接收到,然後通知在網絡中註冊的所有套接字客戶端。儘管@AdrienNK狀態的處理速度很慢,但我認爲該程序可以從網絡上更快的響應中受益。 –

3

字節更小,因此發送速度更快。但是,這些值都不適合一個字節...

+0

是的,我可以簡單地更改這些值,它們甚至是隨機的,因爲您可以看到 –

0

int使用4個字節,所以該字節是最有效的。

但你必須手動將int轉換爲一個字節數組。

+0

,如果您在jdk中爲您使用了許多util類中的一個,則無需手動轉換。 DataOutputStream,ByteBuffer ... – jtahlborn

1

字節較小,所以它們的傳播速度較快,但對於大量應用程序而言,它們的處理速度比int慢。我認爲這取決於網絡的瓶頸吞吐量以及發送的字節數/ int數。

+0

我要做的唯一過程就是檢查是否是我正在等待的事件。 –

+0

然後,如果您真的尋求優化,則字節應該更快。 (雖然我不會推薦它。) – AdrienNK

0

答案是字節,我認爲它是靈活過於