2012-03-24 7 views
2

Apache BCEL을 사용하여 각각 고유 한 관련 이미지가있는 Java 클래스를 동적으로 생성합니다. 이렇게 생성 된 클래스는 다음 인터페이스를 구현 :Java 클래스 파일에 바이트 배열 (원시 데이터)을 저장할 수 있습니까?

interface ImageOwner { 

    byte[] getImage(); 

} 

동적 '된 GetImage'방법을 구현할 때, 내가 생성/메소드가 호출 될 때 바이트 배열을 반환하는 바이트 코드를 생성 할 수 있지만 오히려 단지에 대한 참조를 반환 가능하면 바이트 배열. 원시 데이터를 Java 클래스 파일에 저장할 수 있습니까? 너무 간단한 질문을 보이기 때문에

+2

배열 *은 java의 참조입니다. 네가 무엇을 요구하는지 모르겠다. –

+0

나는 상수 풀이나 그와 비슷한 것에서 그 참조를 얻으려고 생각했다. –

+0

* 정확히 "이 종류의 원시 데이터"는 무엇을 의미합니까? – Bohemian

답변

1

, 내 요구를 달성 할 수있는 최선의 방법에이었다 특별한 필요가있을 수 있습니다 base64는 이미지 데이터를 인코딩하고 상수 풀을 사용하여 결과 문자열을 저장합니다. = ~ 30 %의 손실에도 불구하고 생성자 또는 다른 메서드를 사용하여 바이트 배열 필드를 초기화하는 것보다 낫습니다.

1

내가 여기 정말 모르겠지만, 완성도, 이것은 내가 당신이 원하는 무슨 생각을 할 것입니다 :

public class ImageOwnerImpl implements ImageOwner { 

    // A literal byte array. Tedious, but you could write code 
    // to auto-generate this source from a file 
    private byte[] imageByteArray = new byte[] { -128, 127, ...etc }; 

    public byte[] getImage() { 
     return imageByteArray; 
    } 
} 

이것은 문자 그대로 바이트 배열이다 "클래스 파일에 바이트를 저장하는 방법"에 대한 질문에 대답합니다. 생성자에서 런타임에 파일에서 이미지 바이트를로드 할

대부분의 사람들은, 그러나 당신은 영장 몇 가지 조사 후이 방법

+0

그 정도는 충분하지만, 바이트를 얻기 위해 외부 유틸리티 클래스를 호출하지 않고 클래스 파일에 바이트를 저장하고 클래스 본문에서 바이트를 가져 오려고합니다. –

+0

나는 원하지 않습니다. 당신은 확실히 알고 있습니다. 답안에 명기하십시오. 나는 올바른 것으로 표시 할 것입니다. –

+0

@ThiadodeArruda 코드 예제를 위해 코드를 편집했습니다 – Bohemian

0

jar에 포함되어 있고 클래스 로더를 통해로드 된 파일에서 원시 데이터를로드하는 정적 초기화 프로그램이있는 Impl 클래스를 정의하면됩니다.

0

당신은 단지 바이트 배열로 BCEL의 배열에 대한 구문을 저장할 수있는 문자열 배열 등

0

유일한 상수에 대한 바이트 배열

[java.lang.String 

에 대한

[B 

입니다 Ints, Floats, Longs, Doubles, Strings 및 Classes가 상수 풀에 저장할 수 있습니다. 가장 좋은 방법은 문자열로 저장하고 런타임에 Byte []로 변환하는 것입니다. 적절한 수정 된 유니 코드 인코딩을 적용하는 한 문자열을 null 문자를 처리 할 수 ​​있으므로 base64 인코딩 할 필요가 없습니다.