Bayt dizisini String'e dönüştürme işlemine kod çözme denir. Bu işlem bir Karakter Seti gerektirir. Yine de karakter setini şunun için kullanmalıyız: kod çözme bir bayt dizisi.
liste düğümü java
Bayt dizisini String'e dönüştürmenin iki yolu vardır:
- Kullanarak Dize sınıfı yapıcısı
- Kullanarak UTF-8 kodlaması
String Sınıfı Yapıcısını kullanarak
Bir bayt dizisini String'e dönüştürmenin en basit yolu, yapıcı argümanı olarak byte[] ile String sınıfı yapıcısını kullanabiliriz.
String str=new String(bytes);
Örnek
Aşağıdaki örnekte herhangi bir karakter kodlaması kullanılmamaktadır.
public class ByteArraytoStringExample { public static void main(String args[]) { try { byte[] bytes = 'hello world'.getBytes(); //creates a string from the byte array without specifying character encoding String s = new String(bytes); System.out.println(s); } catch(Exception e) { e.printStackTrace(); } } }
Çıktı:
UTF-8 kodlamasını kullanarak
Bayt dizisini String'e dönüştürürken karakter kodlamasını unutmayın. Baytlar ikili veri olduğundan, String karakter verisidir. Bayt dizisinin oluşturulduğu metnin orijinal kodlamasını bilmek önemlidir. Farklı bir karakter kodlaması kullandığımızda orijinal stringi geri alamıyoruz.
Diyelim ki, ' ile kodlanmış bir dosyadan bayt dizisini okumamız gerekiyor. ISO_8859_1 '. Bayt dizisini string'e dönüştürürken herhangi bir karakter kodlamamız yoktur. Byte dizisini String sınıfı yapıcısını kullanarak String'e dönüştürüyoruz ancak aynı metni geri alacağımız garantisini vermiyor. Bunun nedeni, String sınıfının yapıcısının platformun varsayılan kodlamasını kullanmasıdır.
Bayt, 256'ya kadar farklı değere sahip olabilen 8 bit içerir. Yalnızca yedi bitin kullanıldığı ASCII karakter kümesi için çalışır. Karakter kümeleri 256'dan fazla değere sahipse, karakterlerin bir bayt dizisine nasıl kodlanacağını söyleyen kodlamayı açıkça belirtmemiz gerekir.
Java platformu tarafından desteklenen aşağıdaki karakter kümeleri vardır:
- StandardCharsets.ISO_8859_1
- StandardCharsets.US_ASCII
- StandardCharsets.UTF_16
- StandardCharsets.UTF_16BE
- StandardCharsets.UTF_16LE
Kodlamayı tam hatırlayamadığımız durumlarda platformumuz bu özel karakterleri doğru şekilde dönüştürememektedir. Bu sorun 'sağlanarak çözülür' UTF-8 ' karakter kodlaması olarak. Java, String sınıfında karakter kodlamasını kabul eden başka bir aşırı yüklenmiş kurucu sağlar.
new String(byte[], 'character encoding');
Örnek
Aşağıdaki örnekte kullandık StandardCharset.UTF_8 kodlamayı belirtmek için.
import java.io.IOException; import java.nio.charset.StandardCharsets; public class ByteArraytoStringExample1 { public static void main(String[] args) { try { byte[] b = 'Morning'.getBytes(StandardCharsets.UTF_8); //byte array String string = new String(b, StandardCharsets.UTF_8); //string with 'UTF-8' encoding System.out.println(string); } catch(Exception e) { e.printStackTrace(); } } }
Çıktı:
Örnek
Aşağıdaki örnekte byte dizisini oluştururken char aldık. Otomatik kutulama nedeniyle çalışır. 'T' karakteri bayt dizisinde 84'e dönüştürülüyor ve bu böyle devam ediyor. Bu nedenle her iki bayt dizisinin çıktısı aynıdır.
public class ByteArraytoStringExample2 { public static void main(String[] args) { byte[] byteArray = { 'T', 'E', 'C', 'H', 'N', 'O','L','O','G','Y'}; //byte array of characters byte[] byteArray1 = { 84, 69, 67, 72, 78, 79, 76, 79, 71, 89}; //array of ASCII values String s = new String(byteArray); //converts byteArray to String String str = new String(byteArray1); System.out.println(s); System.out.println(str); } }
Çıktı:
String sınıfı ayrıca bayt dizisini ve Charset'i argüman olarak iletebileceğimiz bir yapıcıya sahiptir. Dolayısıyla aşağıdaki ifade, bayt dizisini Java'da String'e dönüştürmek için de kullanılabilir.
kurt tilkiye karşı
String str = new String(byteArray, StandardCharsets.UTF_8)
String sınıfı ayrıca bayt dizisinin bir alt kümesini String'e dönüştürecek bir yapıcıya da sahiptir.
String(byte[] bytes, int offset, int length, String charsetName)
Farklı kodlamanın kullanıldığı başka bir örneği görelim.
Örnek
import java.io.UnsupportedEncodingException; public class ByteArraytoStringExample3 { public static void main(String args[]) { try { byte[] bytes = new byte[] { 75, 69, 82, 115, 121, 90, 43, 98, -30}; //bytes in ASCII code String utf = new String(bytes, 'UTF-8'); //converts into UTF-8 encoding String cp1252 = new String(bytes, 'Cp1252'); //conversts into Cp1252 endcoding //converts into windows-1252 encoding String windows1252 = new String(bytes, 'Windows-1252'); System.out.println('String in UTF-8 encoding : ' + utf); System.out.println('String in Cp1252 encoding : ' + cp1252); System.out.println('string Windows-1252 encoding : ' + windows1252); } catch(Exception e) { e.printStackTrace(); } } }
Çıktı: