logo

Bayt dizisini Java'da String'e dönüştürme

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ı:

Bayt dizisini Java'da String'e dönüştürme

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ı:

Bayt dizisini Java'da String'e dönüştürme

Ö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ı:

Bayt dizisini Java'da String'e dönüştürme

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ı:

Bayt dizisini Java'da String'e dönüştürme