2012-05-12 132 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

答案是字节,我认为它是灵活过于