Java字节流详解:从基础到高级应用

365直播电视版下载 🖌️ 2025-09-18 10:10:52 🎨 admin 👁️ 9159 ❤️ 916
Java字节流详解:从基础到高级应用

导航

FileInputStream/FileOutputStream

ByteArrayInputStream/ByteArrayOutputStream

BufferedInputStream/BufferedOutputStream

DataInputStream/DataOutputStream

ObjectInputStream/ObjectOutputStream

序列化与反序列化

以字节为单位获取数据的流,称为字节流,它们都继承于InputStream/OutputStream抽象类。

常用的字节流有:

FileInputStream/FileOutputStream,文件字节流(节点流)

ByteArrayInputStream/ByteArrayOutputStream,字节数组流(节点流)

BufferedInputStream/BufferedOutputStream,字节缓存流(处理流)

DataInputStream/DataOutputStream,数据字节流(处理流)

ObjectInputStream/ObjectOutputStream,对象流(处理流)

下面分别介绍一下这五组字节流及用法。

FileInputStream/FileOutputStream

FileInputStream/FileOutputStream是最常用的文件字节流,当数据源为文件对象时,选择这个数据流进行处理。我们可以通过构造器快速了解它的操作数据类型:

public FileInputStream(File file)

public FileOutputStream(File file)

可以看到,这组数据流的操作对象为File类型。

关于数据流的操作,总是分为四个步骤:

1.指定数据源

2.选择合适的数据流

3.进行数据操作

4.关闭流,释放资源

来一个文件的拷贝实例,了解其用法:

public class FileStream {

public static void main(String[] args) {

//1.指定数据源

File in_scr = new File("a.txt"); // 输入数据为文件

File out_scr = new File("a-copy.txt"); // 输出数据也为文件

InputStream is = null;

OutputStream os = null;

try {

//2.选择合适的数据流

is = new FileInputStream(in_scr);

os = new FileOutputStream(out_scr);

//3.进行数据操作

byte[] flush = new byte[1024]; //字节流,数据以字节数组为单位

int len = -1;

while( (len = is.read(flush)) != -1 ) {

// for(int i=0;i

// System.out.println(flush[i]); 可以将输入流直接打印出来观察

// }

os.write(flush,0,len);

}

os.flush(); //将缓存内容输出

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}finally {

//4.关闭流,释放资源

//先打开的先关闭

try {

if(is != null) {

is.close();

}

} catch (IOException e) {

e.printStackTrace();

}

try {

if(os != null) {

os.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

需要注意的点有:

1.flush为byte[]数组,与形参不同,数组传入的是地址,所以在is.read(flush)方法中操作flush,外面的flush也会变换,read方法就是给flush赋值的一个方法,并且有返回值:读取到的元素个数,未读到时返回-1。

2.输出流中是有缓存的,就是说当输出流的数据量到达一定程度,才会输出。所以在结尾,我们需要手动将未到达缓存量的数据输出,使用输出流的flush()方法。

ByteArrayInputStream/ByteArrayOutputStream

ByteArrayInputStream/ByteArrayOutputStream,字节数组流,也是一个常用的节点流。当数据对象字节数组byte[ ]时,使用这种流进行操作。观察一下它们的构造器:

public ByteArrayInputStream(byte buf[])

public ByteArrayOutputStream()

可以看到,输入流的操作对象未byte[ ]字节数组;输出流无参数,并不能直接将流中数据输出为文件等,但ByteArrayOutputStream有toString()等方法,来方便对输出流进行操作。

还是来一个文件的拷贝实例,了解其用法:

public class ByteArrayStream {

public static void main(String[] args) {

//1.指定数据源

byte[] in_scr = new byte[] {

-28, -67, -96, -26, -120, -111, -28, -69, -106 };//输入数据

ByteArrayInputStream bais = null;

ByteArrayOutputStream baos = null;

try {

//2.选择合适的数据流

bais = new ByteArrayInputStream(in_scr);

baos = new ByteArrayOutputStream();

//3.进行数据操作

byte[] flush = new byte[1024];

int len = -1;

System.out.print("输入流:");

while ((len = bais.read(flush)) != -1) {

for (int i = 0; i < len; i++) {

System.out.print(flush[i]+","); //读取输入流

}

baos.write(flush, 0, len);

}

System.out.println();

baos.flush(); //将缓存内容输出,到此,输出流的数据写入已完成

byte[] byteArray = baos

相关文章

68厘米的腰围是多少尺(附:服装尺码对照表)
365日博贴吧

68厘米的腰围是多少尺(附:服装尺码对照表)

📅 09-03 👁️ 1494
都玩过吗 十大可以啪啪啪的正经游戏
手机365体育网站经常打不开

都玩过吗 十大可以啪啪啪的正经游戏

📅 08-11 👁️ 9476
说文解字叙
365直播电视版下载

说文解字叙

📅 08-24 👁️ 7700