我目前有一个Java ByteBuffer,它已经有了Big-Endian格式的数据。然后我想写一个二进制文件作为Little Endian。
下面是刚刚用Big-Endian编写文件的代码:
public void writeBinFile(String fileName, boolean append) throws FileNotFoundException, IOException
{
FileOutputStream outStream = null;
try
{
outStream = new FileOutputStream(fileName, append);
FileChannel out = outStream.getChannel();
byteBuff.position(byteBuff.capacity());
byteBuff.flip();
byteBuff.order(ByteOrder.LITTLE_ENDIAN);
out.write(byteBuff);
}
finally
{
if (outStream != null)
{
outStream.close();
}
}
}
请注意,byteBuff是一个以Big-Endian格式填充的ByteBuffer。
我最后的办法是使用蛮力方法创建另一个缓冲区,并将ByteBuffer设置为little endian,然后从原始(big endian)缓冲区读取“getInt”值,并将“setInt”值设置为little endian缓冲区。我想有更好的方法。。。
下面是我如何解决一个类似的问题,想要获得我正在写入输出文件的整数的“endianness”:
byte[] theBytes = /* obtain a byte array that is the input */
ByteBuffer byteBuffer = ByteBuffer.wrap(theBytes);
ByteBuffer destByteBuffer = ByteBuffer.allocate(theBytes.length);
destByteBuffer.order(ByteOrder.LITTLE_ENDIAN);
IntBuffer destBuffer = destByteBuffer.asIntBuffer();
while (byteBuffer.hasRemaining())
{
int element = byteBuffer.getInt();
destBuffer.put(element);
/* Could write destBuffer int-by-int here, or outside this loop */
}
可能有更有效的方法来实现这一点,但是对于我的特殊问题,我必须在将元素复制到新缓冲区时对它们进行数学转换。但是这应该仍然适用于你的特殊问题。
Endianess对于字节[]没有任何意义。Endianess只适用于多字节数据类型,如短、整数、长、浮点或双。正确获取endianess的正确时间是将原始数据写入字节并读取实际格式的时候。
如果您有一个字节[],则必须解码原始数据类型并使用不同的endianness对其重新编码。我相信你会同意这是a)不容易做或理想b)不能自动完成。
问题内容: 所有, 我一直在网上练习编码问题。目前,我正在研究问题陈述“ 问题”,我们需要在其中转换大尾数<->小尾数。但是考虑到给出的示例,我无法记下步骤: 我正在考虑的逻辑是: 1>获取整数值(由于我在Windows x86上,输入为Little Endian) 2>生成相同的十六进制表示形式。 3>反转表示并生成大端整数 但是我显然在这里缺少一些东西。 谁能指导我。我正在用Java 1.5编
问题内容: 我能够将其转换为无符号整数: 这利用了Go包https://golang.org/src/encoding/binary/binary.go中的BigEndian和LittleEndian类型。 这提供了,但是没有等效项或 有什么想法为什么不呢?另外,应该怎么做呢? 问题答案: 将数字类型转换为一系列字节(),反之亦然,这与字节序有关。您如何解释结果完全取决于您。 您所需要做的就是汇编
问题内容: 我想发送多个随机值。我认为数组是发送它们的最佳方法。但是我不知道如何向Socket写一个数组? 我的Java课: 导入java.io.ByteArrayOutputStream; 导入java.io.IOException; 导入java.io.InputStream; 导入java.net.Socket; 导入java.io. *; 导入java.util.Random; 问题答案:
我正在使用具有Big-Endian字节顺序格式的Java将字节数组值写入文件中。。现在我需要从C程序中读取该文件。。。 我正在写入文件的字节数组由三个字节数组组成,如下所述- 我正在将、和一起写入一个单字节数组,并将生成的字节数组写入一个文件,然后我将使用我的C程序从文件中检索该字节数组数据,然后反序列化以提取,和它的。 下面是我的工作Java代码,它将字节数组值写入大端格式的文件: 现在,我需要
我正在使用Spark 2.3,我需要将Spark数据帧保存到csv文件中,我正在寻找更好的方法。。查看相关/类似的问题,我发现了这个问题,但我需要一个更具体的: 如果DataFrame太大,如何避免使用Pandas?因为我使用了函数(下面的代码),它产生了: 内存不足错误(无法分配内存)。 使用文件I/O直接写入csv是更好的方法吗?它可以保留分隔符吗? 使用df。聚结(1)。写选项(“标题”、“
我正在将JSON插入Google Big Query中。问题的底部是JSON的模式。 下面是一个JSON示例: 如您所见,有一个“_source.fullname”字段带有“Mike Smith”。 当我试图用它创建表时,它出错了: 为非重复字段指定的数组:_source.fullname。 我相信这个字段是_source的一次性字段。我如何克服这个错误? 下面是模式: