Misalkan saya baru saja menggunakan a BufferedInputStream
untuk membaca byte dari file teks yang dikodekan UTF-8 ke dalam array byte. Saya tahu bahwa saya dapat menggunakan rutin berikut untuk mengkonversi byte ke string, tetapi apakah ada cara yang lebih efisien / lebih pintar untuk melakukan ini daripada hanya iterasi melalui byte dan mengkonversi masing-masing?
public String openFileToString(byte[] _bytes)
{
String file_string = "";
for(int i = 0; i < _bytes.length; i++)
{
file_string += (char)_bytes[i];
}
return file_string;
}
String fileString = new String(_bytes,"UTF-8");
?byte[]
dalam memori dan mengubahnya melaluinew String(_bytes,"UTF-8")
(atau bahkan dengan potongan+=
pada string) adalah yang paling efisien. Chaining InputStreams dan Readers mungkin bekerja lebih baik, terutama pada file besar.Jawaban:
Lihatlah konstruktor untuk String
Dan jika Anda merasa malas, Anda dapat menggunakan pustaka Apache Commons IO untuk mengonversi InputStream menjadi sebuah String secara langsung:
sumber
java.nio.charset.Charset.availableCharsets()
peta semua rangkaian karakter, bukan hanya rangkaian karakter diStandardCharsets
. Dan jika Anda ingin menggunakan beberapa charset lain dan masih ingin mencegah konstruktor String dari melemparUnsupportedEncodingException
Anda dapat menggunakanjava.nio.charset.Charset.forName()
Kelas Java String memiliki built-in-constructor untuk mengkonversi array byte ke string.
sumber
Untuk mengonversi data utf-8, Anda tidak dapat mengasumsikan korespondensi 1-1 antara byte dan karakter. Coba ini:
(Bah. Saya mengerti, saya cara memperlambat dalam menekan tombol Post Your Answer.)
Untuk membaca seluruh file sebagai String, lakukan sesuatu seperti ini:
sumber
Anda dapat menggunakan
String(byte[] bytes)
konstruktor untuk itu. Lihat tautan ini untuk detailnya. EDIT Anda juga harus mempertimbangkan charset default plateform Anda sesuai java doc:sumber
Charset
argumen kedua untuk memastikan konversi sudah benar.Anda dapat menggunakan metode yang dijelaskan dalam pertanyaan ini (terutama karena Anda memulai dengan InputStream): Baca / konversi InputStream ke String
Secara khusus, jika Anda tidak ingin bergantung pada pustaka eksternal, Anda dapat mencoba jawaban ini , yang membaca
InputStream
via anInputStreamReader
kechar[]
buffer dan menambahkannya ke aStringBuilder
.sumber
Mengetahui bahwa Anda berurusan dengan array byte UTF-8, Anda pasti ingin menggunakan konstruktor String yang menerima nama charset . Kalau tidak, Anda dapat membiarkan diri Anda terbuka untuk beberapa kerentanan keamanan berbasis pengkodean charset. Perhatikan bahwa ia melempar
UnsupportedEncodingException
yang harus Anda tangani. Sesuatu seperti ini:sumber
Inilah fungsi yang disederhanakan yang akan membaca dalam byte dan membuat string. Ini mengasumsikan Anda mungkin sudah tahu di mana penyandian file (dan jika tidak, default).
sumber
String memiliki konstruktor yang menggunakan byte [] dan charsetname sebagai parameter :)
sumber
Ini juga melibatkan iterasi, tetapi ini jauh lebih baik daripada merangkai string karena mereka sangat sangat mahal.
sumber
String str = new String(byte[])
akan baik-baik saja.Mengapa tidak mendapatkan apa yang Anda cari dari memulai dan membaca string dari file alih-alih array byte? Sesuatu seperti:
lalu bacaLine dari dalam sampai selesai.
sumber
Saya menggunakan cara ini
String strIn = new String(_bytes, 0, numBytes);
sumber