在 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