我想更改字节数组中的值以在MSB中放入较长的时间戳值。有人可以告诉我最好的方法是什么。我不想一点一点地插入值,我认为这是非常低效的。
long time = System.currentTimeMillis();
Long timeStamp = new Long(time);
byte[] bArray = new byte[128];
我想要的是这样的:
byte[0-63] = timeStamp.byteValue();
这样是可能的。在此字节数组中编辑/插入值的最佳方法是什么。由于字节是原始数据,我不认为有一些直接的实现可以利用吗?
编辑:
似乎System.currentTimeMillis()
比快Calendar.getTimeInMillis()
,所以用它替换上面的代码。如果有误,请纠正我。
有多种方法可以做到这一点:
使用ByteBuffer
(最佳选择-简洁易读):
byte[] bytes = ByteBuffer.allocate(Long.SIZE / Byte.SIZE).putLong(someLong).array();
您还可以使用DataOutputStream
(更详细):
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeLong(someLong);
dos.close();
byte[] longBytes = baos.toByteArray();
LongSerializer
Hector的代码)(较难阅读): byte[] b = new byte[8];
for (int i = 0; i < size; ++i) {
b[i] = (byte) (l >> (size - i - 1 << 3));
}
然后,您可以通过一个简单的循环将这些字节追加到现有数组中:
// change this, if you want your long to start from
// a different position in the array
int start = 0;
for (int i = 0; i < longBytes.length; i ++) {
bytes[start + i] = longBytes[i];
}
问题内容: 我将类型为DataTable的对象保存到SQL 2005数据库中的类型为varbinary的字段中。我想找回它,但无法键入强制转换。这就是我保存它的方式。 “ dt”是DataTable对象实例。 问题答案: 您在说的是二进制序列化和反序列化。也许这会有所帮助。
问题内容: 如何在Java中将 转换为a 并返回? 我正在尝试将a转换为a,以便能够通过TCP连接发送。另一方面,我想将其转换为。 问题答案: 或包装在一个类中,以避免重复创建: 由于它变得如此流行,我只想提一提,我认为在大多数情况下,最好使用像这样的库。而且,如果你对库有一些奇怪的反对意见,则可能应该首先针对本机Java解决方案考虑此答案。我认为我的答案真正要解决的主要问题是,你不必自己担心系统
问题内容: 我需要使用反射获取字段的值。碰巧我并不总是确定该字段的数据类型是什么。为此,为了避免某些代码重复,我创建了以下方法: 并使用如下方法: 要么 问题是我似乎无法转换为: 有没有更好的方法来实现这一目标? 我正在使用Java 1.6。 问题答案: 不,即使可以从转换为,也无法转换为。对于已知为数字的 单个 值,并且想要获得长整型值,可以使用: 对于数组,这将比较棘手…
问题内容: 这可能是一个简单的,总机问题,但我的第一次尝试令人惊讶地完全失败了。我想获取一组原始的long并将其转换成一个列表,我试图这样做: 什么是正确的方法? 问题答案: 我发现使用apache commons lang ArrayUtils(JavaDoc,Maven依赖项)很方便 它还具有反向API 编辑:更新以提供完整的转换为列表,如注释和其他修复建议。
这段代码有两个问题: explext强制转换; 我想知道是否有一行的解决方案。 那么我们有没有更优雅的方法来做到这一点呢? 队列是否反向并不重要。我需要一个反转元素的int数组。
问题内容: 我有两个长度未知的数组,我只想将一个附加到另一个的末尾,即: 我曾尝试使用,但似乎无法使其正常工作。 问题答案: 使用,应类似于以下内容: