在 Java 中轉換輸入流為位元組陣列
-
使用 Java 中的
readAllBytes()
方法將 InputStream 轉換為位元組陣列 -
使用 Java 中的
toByteArray()
方法將輸入流轉換為位元組陣列 -
使用 Java 中的
write()
方法將輸入流轉換為位元組陣列 -
使用 Java 中的
readAllBytes()
方法將 InputStream 轉換為位元組陣列 -
使用 Java 中的
readFully()
方法將 InputStream 轉換為位元組陣列 -
使用 Java 中的
getBytes()
方法將輸入流轉換為位元組陣列 - 使用 Java 中的自定義程式碼將輸入流轉換為位元組陣列
-
使用 Java 中的
toByteArray()
方法將輸入流轉換為位元組陣列
本教程介紹瞭如何在 Java 中把輸入流轉換為位元組陣列,並列舉了一些示例程式碼來理解這個主題。
InputStream
是一個抽象類,也是所有表示位元組輸入流的類的超類。Java 使用輸入流從任何源如檔案、陣列等讀取資料。然後,我們將看到如何通過使用 Java 中的一些內建方法和自定義程式碼將該流轉換為位元組陣列。
在本文中,我們將使用幾個內建方法,如 toByteArray()
、readAllBytes()
、readFully()
、getBytes()
、write()
等,並使用一個文字檔案 abc.txt
來讀取資料。這個文字檔案中包含了一句話:Welcome to Delfstack
,我們將讀到這句話並轉換成位元組陣列,進一步可以轉換成字串來檢查所需的結果。
使用 Java 中的 readAllBytes()
方法將 InputStream 轉換為位元組陣列
我們可以使用 readAllBytes()
方法將所有資料放入一個位元組陣列。這個方法返回一個位元組陣列,可以進一步傳遞到 String
建構函式中列印文字資料。
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class SimpleTesting{
public static void main(String[] args) {
try{
InputStream ins = new FileInputStream("abc.txt");
byte[] byteArray = ins.readAllBytes();
System.out.println(new String(byteArray));
ins.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
輸出:
Welcome to Delfstack
使用 Java 中的 toByteArray()
方法將輸入流轉換為位元組陣列
如果使用 Apache 庫,則可以使用 IOUtils
類的 toByteArray()
方法來獲取所有資料到位元組陣列中。這個方法返回一個位元組陣列,可以進一步傳遞給 String
建構函式來列印文字資料。
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
public class SimpleTesting{
public static void main(String[] args) {
try {
InputStream ins = new FileInputStream("abc.txt");
byte[] bytes = IOUtils.toByteArray(ins);
System.out.println(new String(bytes));
}catch(IOException e) {
e.printStackTrace();
}
}
}
輸出:
Welcome to Delftstack
使用 Java 中的 write()
方法將輸入流轉換為位元組陣列
我們可以使用 ByteArrayOutputStream
類的 write()
方法將所有的資料轉換成一個位元組陣列。這個方法返回一個位元組陣列,可以傳遞給 String
建構函式來列印文字資料。
package myjavaproject;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class SimpleTesting{
public static void main(String[] args) {
try{
InputStream ins = new FileInputStream("abc.txt");
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int read;
byte[] data = new byte[16384];
while ((read = ins.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, read);
}
System.out.println(new String(data));
ins.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
輸出:
Welcome to Delfstack
使用 Java 中的 readAllBytes()
方法將 InputStream 轉換為位元組陣列
我們可以使用 DataInputStream
類的 readAllBytes()
方法將所有資料轉換為一個位元組陣列。這個方法返回的位元組陣列可以進一步傳遞到 String
建構函式中列印文字資料。
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class SimpleTesting{
public static void main(String[] args) {
try{
String file = "abc.txt";
DataInputStream dis = new DataInputStream(new FileInputStream(file));
byte[] bytes = dis.readAllBytes();
System.out.println(new String(bytes));
dis.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
輸出:
Welcome to Delftstack
使用 Java 中的 readFully()
方法將 InputStream 轉換為位元組陣列
我們可以使用 RandomAccessFile
類的 readFully()
方法將所有資料轉換為位元組陣列。這個方法返回一個位元組陣列,它可以傳遞給 String
建構函式來列印文字資料。
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
public class SimpleTesting{
public static void main(String[] args) {
try{
String file = "abc.txt";
InputStream is = new FileInputStream(file);
RandomAccessFile raf = new RandomAccessFile(file, "r");
byte[] bytesData = new byte[(int) raf.length()];
raf.readFully(bytesData);
System.out.println(new String(bytesData));
is.close();
raf.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
輸出:
Welcome to Delfstack
使用 Java 中的 getBytes()
方法將輸入流轉換為位元組陣列
我們可以使用 String
類的 getBytes()
方法將所有資料轉換成一個位元組陣列。這個方法返回一個位元組陣列,可以進一步傳遞到 String
建構函式中列印文字資料。
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.stream.Collectors;
public class SimpleTesting{
public static void main(String[] args) {
try{
String file = "abc.txt";
byte[] bytesData = {};
InputStream is = new FileInputStream(file);
try (BufferedReader buffer = new BufferedReader(new InputStreamReader(is))) {
bytesData = buffer.lines().collect(Collectors.joining("\n")).getBytes();
}
System.out.println(new String(bytesData));
is.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
輸出:
Welcome to Delftstack
使用 Java 中的自定義程式碼將輸入流轉換為位元組陣列
如果你不想使用任何內建的方法,可以使用這段自定義的程式碼將輸入流轉換為位元組陣列,這段程式碼返回一個位元組陣列,它可以進一步傳入 String
建構函式來列印文字資料。這段程式碼返回一個位元組陣列,可以進一步傳遞到 String
建構函式中列印文字資料。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class SimpleTesting{
public static void main(String[] args) {
try{
String file = "abc.txt";
byte[] bytesData = {};
bytesData = getBytesFromFile(new File(file));
System.out.println(new String(bytesData));
}catch(IOException e) {
e.printStackTrace();
}
}
public static byte[] getBytesFromFile(File file) throws IOException {
InputStream is = new FileInputStream(file);
long length = file.length();
byte[] bytes = new byte[(int)length];
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
if (offset < bytes.length) {
throw new IOException("Could not read file "+file.getName());
}
return bytes;
}
}
輸出:
Welcome to Delfstack
使用 Java 中的 toByteArray()
方法將輸入流轉換為位元組陣列
我們可以使用 ByteArrayOutputStream
類的 toByteArray()
方法將所有資料轉換為一個位元組陣列。這個方法返回一個位元組陣列,可以進一步傳遞到 String
建構函式中列印文字資料。
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class SimpleTesting{
public static void main(String[] args) {
try{
String file = "abc.txt";
InputStream is = new FileInputStream(file);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
is.transferTo(byteArrayOutputStream);
byte[] bytesData = byteArrayOutputStream.toByteArray();
System.out.println(new String(bytesData));
is.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
輸出:
Welcome to Delfstack