图文详解Java中的字节输入与输出流
什么是字节输入与输出流
在Java中,一个流就是一种数据传输方式。流分为字节流和字符流两种类型。字节输入流和输出流是Java中的一种字节流,主要用于读取和写入字节数据。
既然是字节数据,那么我们可以理解成Java中所有的数据最终都要用二进制的形式进行存储,而字节流就是能够读入/写出(input/output)这些二进制数据的流。我们可以从文件、网络等各种来源中读取字节数据,也可以将字节数据写入到文件、网络等各种目的地中。
字节输入流
字节输入流和输出流很多时候是成对出现的,即在一次操作中既需要读入字节数据,也需要将字节数据写出。下面我们主要介绍字节输入流的使用。
字节输入流的主要实现类有InputStream及其子类(如FileInputStream)。它们都有一个read方法,可以用来读取一个字节数据。InputStream有一个较为常用的read方法,能够读取一定数量的字节数据存储到byte数组中,具体的形式如下:
public int read(byte[] buffer) throws IOException
其中,参数buffer
是一个byte数组,表示用来存储读取出来的字节数据;返回值表示实际读取到的字节数。我们可以通过while循环不断地使用这个方法从一个文件中读取数据,直到读取完毕。
下面是一个读取某文件的例子,文件名为test.txt:
import java.io.*;
public class FileInputStreamDemo {
public static void main(String[] args) {
try {
FileInputStream fis=new FileInputStream("test.txt");
byte[] buffer=new byte[1024];
int length;
while ((length=fis.read(buffer))!=-1){
System.out.print(new String(buffer,0,length));
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
字节输出流
字节输出流主要有OutputStream及其子类(如FileOutputStream)。它们也有一个write方法,可以用来写出一个字节数据。OutputStream同样也有一个针对byte[]
数组的write方法,将一个字节数组中的所有字节写出。具体形式如下:
public void write(byte[] buffer) throws IOException
上面这段代码,表示将“Hello, world!”这个字符串以字节形式写入到某个文件中:
import java.io.*;
public class FileOutputStreamDemo {
public static void main(String[] args) {
try {
FileOutputStream fos=new FileOutputStream("output.txt");
byte[] buffer="Hello, world!".getBytes();
fos.write(buffer);
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
总结
字节输入流和输出流是Java中非常重要的一种数据流,应用非常广泛。掌握它们可以使我们在Java开发中更为灵活地处理各种数据,比如从文件中读取数据、将数据写入到文件中等等。
示例
读取图片文件
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamDemo2 {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("test.png"); // 输入流
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) != -1) {
// do something
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
写图片文件
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamDemo2 {
public static void main(String[] args) {
try {
FileOutputStream fos = new FileOutputStream("output.png"); // 输出流
byte[] buffer = new byte[1024];
// do something
fos.write(buffer);
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上两个示例,分别演示了读取图片文件和写出图片文件的过程。需要注意的是,这里读取和写出的并不是普通的文本文件,而是二进制数据,我们需要采用字节流的方式来进行读取和写出。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:图文详解Java中的字节输入与输出流 - Python技术站