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이 있다고 가정하면char
2바이트를 할당하고 다음으로 메모리 사용 공간을 할당합니다.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
'programing' 카테고리의 다른 글
Vuex/Pinia 스토어에서의 관계를 어떻게 처리하고 동기화 상태를 유지합니까? (0) | 2022.07.27 |
---|---|
javascript 코드를 c 코드로 변환 (0) | 2022.07.27 |
vue-module 네비게이션 바를 유지하는 방법 (0) | 2022.07.26 |
++ 연산자에 대한 C와 C++의 차이 (0) | 2022.07.26 |
커밋을 사용한 액션에서 VueX 업데이트 상태 (0) | 2022.07.26 |