programing

Java 문자열 바이트 수

shortcode 2022. 7. 26. 23:58
반응형

Java 문자열 바이트 수

String Java가 x 문자열의 하려면 어떻게 해야 하나요 , , , , , , , , , , , , , , , , , , , , , , , , 「 」의 바이트 수를 계산해야 합니다

문자열은 문자 목록(코드 포인트)입니다.문자열을 나타내기 위해 사용되는 바이트 수는 바이트를 바이트로 변환하기 위해 사용하는 인코딩에 전적으로 의존합니다.

즉, 문자열을 바이트 배열로 변환한 후 다음과 같이 크기를 확인할 수 있습니다.

// The input string for this test
final String string = "Hello World";

// Check length, in characters
System.out.println(string.length()); // prints "11"

// Check encoded sizes
final byte[] utf8Bytes = string.getBytes("UTF-8");
System.out.println(utf8Bytes.length); // prints "11"

final byte[] utf16Bytes= string.getBytes("UTF-16");
System.out.println(utf16Bytes.length); // prints "24"

final byte[] utf32Bytes = string.getBytes("UTF-32");
System.out.println(utf32Bytes.length); // prints "44"

final byte[] isoBytes = string.getBytes("ISO-8859-1");
System.out.println(isoBytes.length); // prints "11"

final byte[] winBytes = string.getBytes("CP1252");
System.out.println(winBytes.length); // prints "11"

따라서 단순한 "ASCII" 문자열이라도 사용되는 인코딩에 따라 표현에 다른 바이트 수를 포함할 수 있습니다.은 어떤 이든 ' 집합이든'의로 쓰세요.getBytes()UTF-8이 모든 문자를 1바이트로 나타낸다고 가정하지 마십시오.그것도 사실이 아닙니다.

final String interesting = "\uF93D\uF936\uF949\uF942"; // Chinese ideograms

// Check length, in characters
System.out.println(interesting.length()); // prints "4"

// Check encoded sizes
final byte[] utf8Bytes = interesting.getBytes("UTF-8");
System.out.println(utf8Bytes.length); // prints "12"

final byte[] utf16Bytes= interesting.getBytes("UTF-16");
System.out.println(utf16Bytes.length); // prints "10"

final byte[] utf32Bytes = interesting.getBytes("UTF-32");
System.out.println(utf32Bytes.length); // prints "16"

final byte[] isoBytes = interesting.getBytes("ISO-8859-1");
System.out.println(isoBytes.length); // prints "4" (probably encoded "????")

final byte[] winBytes = interesting.getBytes("CP1252");
System.out.println(winBytes.length); // prints "4" (probably encoded "????")

(문자 집합 인수를 지정하지 않으면 플랫폼의 기본 문자 집합이 사용됩니다.이것은 상황에 따라서는 도움이 될 수 있습니다만, 일반적으로 디폴트에 의존하지 않도록 해 주세요.또, 부호화/디코딩이 필요한 경우는 반드시 명시적인 문자 세트를 사용합니다).

64비트 참조를 사용하는 경우:

sizeof(string) = 
8 + // object header used by the VM
8 + // 64-bit reference to char array (value)
8 + string.length() * 2 + // character array itself (object header + 16-bit chars)
4 + // offset integer
4 + // count integer
4 + // cached hash code

즉, 다음과 같습니다.

sizeof(string) = 36 + string.length() * 2

32비트 VM 또는 압축 OOP(-XX:+UseCompressedOops)를 사용하는 64비트 VM에서는 참조는 4바이트입니다.따라서 총계는 다음과 같습니다.

sizeof(string) = 32 + string.length() * 2

이 경우 문자열 객체에 대한 참조는 고려되지 않습니다.

현학적인 답변(결과에 따라서는 반드시 가장 유용한 답변은 아니지만)은 다음과 같습니다.

string.length() * 2

으로 Java에 됩니다.UTF-16BE부호화 사용) 및 「」( 「2 바이트 사용」)입니다.String.length()단위로 UTF-16 코드 단위와 .따라서 이는 다음과 같습니다.

final byte[] utf16Bytes= string.getBytes("UTF-16BE");
System.out.println(utf16Bytes.length);

를 알 수 .char배열(바이트 단위)

★★★★★★"UTF-16" 를 낳다"UTF-16BE"이전 인코딩은 BOM을 삽입하고 배열 길이에 2바이트를 추가합니다.

Java에서 문자열을 UTF8 바이트 배열로 변환하거나 UTF8 바이트 배열에서 변환하는 방법에 따르면:

String s = "some text here";
byte[] b = s.getBytes("UTF-8");
System.out.println(b.length);

A String내에 합니다. 당신은 이런 도 모릅니다.sizeof("Hello World")데이터 구조 자체에 의해 할당된 바이트 수를 반환합니다.

Java가 sizeof데이터 구조를 저장하기 위해 메모리를 할당하지 않기 때문입니다.'는 ''를 볼 수 있어요.String.java대략적인 견적을 제출하면 몇 가지 'int'와 몇 가지 참고 자료, 그리고 한 가지를 볼 수 있습니다.char[]자바 언어 사양에서는 다음과 같이 정의되어 있습니다.char지정할 수 있는 범위는 0 ~65535 입니다.따라서 2바이트는 1개의 문자를 메모리에 유지하는 데 충분합니다.그러나 JVM은 2바이트에 1개의 문자를 저장할 필요가 없습니다.또한 JVM의 구현에 대해 보증하기만 하면 됩니다.char는 정의된 범위의 값을 유지할 수 있습니다.

그렇게sizeof자바에서는 전혀 의미가 없습니다.단, 큰 String과 1개의 String이 있다고 가정하면char2바이트를 할당하고 다음으로 메모리 사용 공간을 할당합니다.String오브젝트는 적어도2 * str.length()바이트 단위입니다.

getBytes()라는 메서드가 있습니다.현명하게 사용하세요.

다음을 시도해 보십시오.

Bytes.toBytes(x).length

이전에 x를 선언하고 초기화했다고 가정합니다.

트라이 캐치를 피하려면 다음을 사용합니다.

String s = "some text here";
byte[] b = s.getBytes(StandardCharsets.UTF_8);
System.out.println(b.length);

Apache Commons를 사용하여 다음을 시도해 보십시오.

String src = "Hello"; //This will work with any serialisable object
System.out.println(
            "Object Size:" + SerializationUtils.serialize((Serializable) src).length)

언급URL : https://stackoverflow.com/questions/4385623/bytes-of-a-string-in-java

반응형