int []를 byte []로 변환하는 방법
RGB 이미지를 배열로 변환하여 파일에 저장하고 싶습니다.
Java에서 정수 배열을 바이트 배열로 변환하는 가장 좋은 방법은 무엇입니까?
마찬가지로 브라이언은 말한다, 당신은 무엇 정렬 변환 당신이 필요 로하는 방법을 작동해야합니다 .
"일반"이미지 파일 (jpg, png 등)로 저장 하시겠습니까?
그렇다면 자바 이미지 I / O API를 사용해야합니다 .
"원시"형식으로 다음과 IntBuffer
NIO 를 사용합니다 .
ByteBuffer / 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]);
}
}
}
이 방법을 사용하십시오
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();
}
먼저 정수 1 개를 바이트 집합으로 변환하는 방법을 결정해야합니다.
아마도 (?) 1 개의 정수에서 4 바이트로, 시프트 ( >>
또는 <<
) 연산자를 사용하여 각 바이트를 가져옵니다 (바이트 순서를 확인하십시오!). 정수 배열 길이의 4 배 바이트 배열에 복사합니다.
파일에 저장하려는 경우 FileOutputStream.write를 사용하여 파일에 직접 저장하고 싶을 수 있습니다.
OutputStream os = new FileOutputStream("aa");
int[] rgb = { 0xff, 0xff, 0xff };
for (int c : rgb) {
os.write(c);
}
os.close();
이후 :
이 출력 스트림에 지정된 바이트를 씁니다. 쓰기에 대한 일반적인 계약은 출력 스트림에 1 바이트가 기록되는 것입니다. 기록 될 바이트는 인수 b의 하위 8 비트입니다. 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;
}
'ByteArrayOutputStream'과 함께 'DataOutputStream'을 사용합니다.
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]
참조 URL : https://stackoverflow.com/questions/1086054/how-to-convert-int-to-byte
'ProgramingTip' 카테고리의 다른 글
UI의 무단 작업을 숨기거나 수행해야합니까? 아니면 오류가 발생합니까? (0) | 2020.12.30 |
---|---|
Maven은 SSH를 사용하여 로컬 파일을 원격 서버에 복사합니다. (0) | 2020.12.30 |
Mysql이 열을 분할 할 수 있습니까? (0) | 2020.12.30 |
gemspec에서 최소 Ruby 버전을 어떻게 지정합니까? (0) | 2020.12.30 |
_id의 mongodb 정렬 순서 (0) | 2020.12.30 |