回答
由于Brian说,你需要找出你需要怎么什么样的转换。
你想将它保存为“普通”图像文件(JPG,PNG等)吗?
如果是这样,您应该使用Java Image I/O API。
如果要将其保存为“原始”格式,则必须指定写入字节的顺序,然后使用IntBuffer
和NIO。
由于使用字节缓冲区/ IntBuffer组合的例子:
import java.nio.*;
import java.net.*;
class Test
{
public static void main(String [] args)
throws Exception // Just for simplicity!
{
int[] data = { 100, 200, 300, 400 };
ByteBuffer byteBuffer = ByteBuffer.allocate(data.length * 4);
IntBuffer intBuffer = byteBuffer.asIntBuffer();
intBuffer.put(data);
byte[] array = byteBuffer.array();
for (int i=0; i < array.length; i++)
{
System.out.println(i + ": " + array[i]);
}
}
}
您需要决定如何先将1个整数转换为一组字节。 (?)1个整数到4个字节,并使用移位(>>
或<<
)运算符来获取每个字节(注意字节排序!)。复制到整数数组长度4倍的字节数组。
也许用这个方法
byte[] integersToBytes(int[] values)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
for(int i=0; i < values.length; ++i)
{
dos.writeInt(values[i]);
}
return baos.toByteArray();
}
这会将int分割为字节。我不认为这是需要的。 – 2009-07-06 08:56:19
他想把它保存到一个文件中供以后使用,所以这将是合适的 – Ram 2009-07-06 11:14:11
,如果你的目的是保存到文件,你也许想用在文件直接保存FileOutputStream.write:
OutputStream os = new FileOutputStream("aa");
int[] rgb = { 0xff, 0xff, 0xff };
for (int c : rgb) {
os.write(c);
}
os.close();
因为它:
将指定的字节写入此输出流。写入的一般契约是将一个字节写入输出流。要写入的字节是参数b的八个低位。 b的24个高位被忽略。
我创造了这个代码,它的工作相当不错:
int IntToByte(byte arrayDst[], int arrayOrg[], int maxOrg){
int i;
int idxDst;
int maxDst;
//
maxDst = maxOrg*4;
//
if (arrayDst==null)
return 0;
if (arrayOrg==null)
return 0;
if (arrayDst.length < maxDst)
return 0;
if (arrayOrg.length < maxOrg)
return 0;
//
idxDst = 0;
for (i=0; i<maxOrg; i++){
// Copia o int, byte a byte.
arrayDst[idxDst] = (byte)(arrayOrg[i]);
idxDst++;
arrayDst[idxDst] = (byte)(arrayOrg[i] >> 8);
idxDst++;
arrayDst[idxDst] = (byte)(arrayOrg[i] >> 16);
idxDst++;
arrayDst[idxDst] = (byte)(arrayOrg[i] >> 24);
idxDst++;
}
//
return idxDst;
}
int ByteToInt(int arrayDst[], byte arrayOrg[], int maxOrg){
int i;
int v;
int idxOrg;
int maxDst;
//
maxDst = maxOrg/4;
//
if (arrayDst==null)
return 0;
if (arrayOrg==null)
return 0;
if (arrayDst.length < maxDst)
return 0;
if (arrayOrg.length < maxOrg)
return 0;
//
idxOrg = 0;
for (i=0; i<maxDst; i++){
arrayDst[i] = 0;
//
v = 0x000000FF & arrayOrg[idxOrg];
arrayDst[i] = arrayDst[i] | v;
idxOrg++;
//
v = 0x000000FF & arrayOrg[idxOrg];
arrayDst[i] = arrayDst[i] | (v << 8);
idxOrg++;
//
v = 0x000000FF & arrayOrg[idxOrg];
arrayDst[i] = arrayDst[i] | (v << 16);
idxOrg++;
//
v = 0x000000FF & arrayOrg[idxOrg];
arrayDst[i] = arrayDst[i] | (v << 24);
idxOrg++;
}
//
return maxDst;
}
我会用 'DataOutputStream类' 与 'ByteArrayOutputStream'。
public final class Converter {
private static final int BYTES_IN_INT = 4;
private Converter() {}
public static byte [] convert(int [] array) {
if (isEmpty(array)) {
return new byte[0];
}
return writeInts(array);
}
public static int [] convert(byte [] array) {
if (isEmpty(array)) {
return new int[0];
}
return readInts(array);
}
private static byte [] writeInts(int [] array) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream(array.length * 4);
DataOutputStream dos = new DataOutputStream(bos);
for (int i = 0; i < array.length; i++) {
dos.writeInt(array[i]);
}
return bos.toByteArray();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static int [] readInts(byte [] array) {
try {
ByteArrayInputStream bis = new ByteArrayInputStream(array);
DataInputStream dataInputStream = new DataInputStream(bis);
int size = array.length/BYTES_IN_INT;
int[] res = new int[size];
for (int i = 0; i < size; i++) {
res[i] = dataInputStream.readInt();
}
return res;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
public class ConverterTest {
@Test
public void convert() {
final int [] array = {-1000000, 24000, -1, 40};
byte [] bytes = Converter.convert(array);
int [] array2 = Converter.convert(bytes);
assertTrue(ArrayUtils.equals(array, array2));
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(bytes));
System.out.println(Arrays.toString(array2));
}
}
打印:
[-1000000, 24000, -1, 40]
[-1, -16, -67, -64, 0, 0, 93, -64, -1, -1, -1, -1, 0, 0, 0, 40]
[-1000000, 24000, -1, 40]
- 1. 如何将int转换为byte []?
- 2. 如何将int转换为Byte数组?
- 3. 如何将int转换为byte []并重新设置byte []的值
- 4. 将int []转换为C#中的byte []
- 5. 在Android中将int转换为byte []
- 6. 在.NET中将int转换为byte [4]
- 7. 如何在C#中将int [,]转换为byte []#
- 8. 如何在Java中将(int)5转换为(byte)0x05?
- 9. 如何提高将byte []转换为int的性能?
- 10. 如何将图像(BYTE *)转换为Base64
- 11. 如何将HashSet转换为byte []?
- 12. 如何将byte [100]转换为guid
- 13. 如何将byte []转换为InputStream?
- 14. 如何将byte []转换为varchar?
- 15. 如何将DSA私钥转换为byte []?
- 16. 如何将ImageSource转换为byte []?
- 17. 如何将int数组转换为int?
- 18. 将byte []转换为UInt16。
- 19. C# - 将uint转换为byte []
- 20. 将[Int?]转换为[Int]
- 21. 将int转换为int []
- 22. 将IO Int转换为Int
- 23. 将1 BYTE转换为int值,从00..FF到0..255
- 24. Java - 将int转换为4字节的Byte数组?
- 25. java使用什么算法将int转换为byte?
- 26. Scala库将数字(Int,Long,Double)转换为Array [Byte]
- 27. 如何将此c#byte []转换为java byte [],然后将此数组转换为位图?
- 28. 从Int到Byte的转换问题(Java)
- 29. 如何将IntPtr/Int转换为Socket?
- 30. 如何将int转换为QString?
也许如果你提到的原因,你选择转换INT []为byte []你会得到更好,更有针对性的回答。 – 2009-07-06 08:55:00