这是关于编写 java 类以及如何实例化它们的一般问题。
public class transaction
{
int amount;
char ref;
}
如果一个类是这样写的,那么它可以像结构一样使用。然后,当数据作为数据报中的 byte[] 通过网络传输时,它被转换为事务对象。这样做的一个地方是在一个单独的类中,这样说:
public class doStuff
{
static transaction t; // the int and the char are alloc'd onto the DataSegment
public static transaction fromByte(byte[] buf)
{
t = new transaction(); // make sure t is null to begin with (on the heap)
t.ref = ''; // initialise char (to avoid null bytes)
t.amount = ByteBuffer.wrap(buf).getInt();
t.ref = ByteBuffer.wrap(buf).getChar();
return t;
}
}
然后另一个类像这样调用 doStuff:
import doStuff;
class otherClass extends Thread
{
static transaction x = new transaction();
... in the run method
x = doStuff.fromByte(buf);
...
}
但是现在我想将类数据和方法一起保存在一个地方(应该是这样的?)所以不是在 doStuff 类中使用 fromByte(byte[] buf) 方法,而是将其移至事务类。所以事务类现在看起来像这样:
public class transaction
{
int amount;
char ref;
static transaction t;
public static transaction fromByte(byte[] buf)
{
t = new transaction(); // make sure t is null to begin with
t.ref = ''; // initialise char (to avoid null bytes)
t.amount = ByteBuffer.wrap(buf).getInt();
t.ref = ByteBuffer.wrap(buf).getChar();
return t;
}
}
然后在 otherClass 我使用:
import transaction;
class otherClass extends Thread
{
static transaction x = new transaction();
... in the run method
x = fromByte(buf);
...
}
从表面上看,这一切都和以前一样。
我的问题是:fromByte(byte[] buf)
将交易数据(金额和参考)的操作添加到transaction
类中,然后实例化对象的开销transaction
发生变化。如果每秒有数百个事务来自网络,那么将fromByte(byte[] buf)
方法添加到transaction
类意味着当它在doStuff
类中实例化时,将使用比以前更多的开销。换句话说,不是每次生成类时简单地生成一个int
和一个(作为数据段上的静态变量) ,而是在堆上生成它(我认为,而不是数据段),然后将方法推入堆栈然后char
doStuff
foo
fromByte(buf)
transaction
类再次在数据段上递归调用自身(静态变量)......
好吧,这似乎有点乱。有没有更好的方法将数据和方法放在同一个类中并保持最大速度?它能否克服递归变量调用(fromByte 方法返回一个事务对象,在“int/char”形式中没问题)有什么意见吗?:-)