对流的一个功能的扩展,可以更加方便的读取 int long 字符等类型的数据。
一、DataOutputStream 基本语法
DataOutputStream dos=new DataOutputStream(new FileOutputStream ("C:\\test\\java\\ok.txt"));
dos.writeUTF("123123123中国加油,武汉加油!");
dos.close();
二、DataInputstream 基本语法
DataInputStream dis = new DataInputStream(new FileInputStream("C:\\test\\java\\ok.txt"));
System.out.println(dis.readUTF());
dis.close();
三、字节缓冲流
BufferedOutStream & BufferedInputStream
这两个流累为IO提供了带缓冲区的操作,一般打开文件进行写入活读取操作,都会加上缓冲区。
从应用程序中把数据访问如文件,将相当于将一缸水倒入到另一缸中
FileOutputStream --> write 相当于一滴一滴的把水转入过去
DataOutputStream --->writeXX 方法会方便些相当于一瓢一瓢转入过去
BufferedOutputStream---> write 相当于一瓢一瓢返给桶中(相当于缓冲区),在从桶倒入缸中
我们用那个单字节,批量字节,buffered文件拷贝,运行速度如下
单字节代码如下:
public static MessageEntity copyFileByByte() throws IOException {
MessageEntity mess = new MessageEntity();
mess.setMessFlag(true);
mess.setMessage("文件拷贝成功!");
FileInputStream fis = new FileInputStream(原路径);
FileOutputStream fos = new FileOutputStream(目的路径);
try {
if (!srcFile.exists()) {
mess.setMessValue(false);
mess.setMessage("源文件路徑不存在!");
return mess;
}
if (!destFile.getParentFile().exists()) {
destFile.getParentFile().mkdirs();
}
int bytes= 0;
while ((bytes= fis.read()) != -1) {
fos.write(bytes);
}
} catch (IOException e) {
mess.setMessFlag(false);
mess.setMessage(e.getMessage());
} catch (Exception e) {
mess.setMessFlag(false);
mess.setMessage(e.getMessage());
} finally {
fis.close();
fos.close();
}
return mess;
}
拷贝文件为:663460 毫秒 视频文件为:62mb
用buffered文件拷贝:
public static MessageEntity coptFileByBuffer() throws IOException {
MessageEntity mess = new MessageEntity();
mess.setMessFlag(true);
mess.setMessage("文件拷贝成功!");
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(目的路径));
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(原路径));
try {
if (!srcFile.exists()) {
mess.setMessValue(false);
mess.setMessage("源文件路徑不存在!");
return mess;
}
if (!destFile.getParentFile().exists()) {
destFile.getParentFile().mkdirs();
}
int bytes= 0;
while ((bytes = bis.read()) != -1) {
bos.write(bytes);
bos.flush();// 刷新缓冲区
}
} catch (Exception e) {
mess.setMessFlag(false);
mess.setMessage("文件拷贝失败!");
} finally {
bis.close();
bos.close();
}
return mess;
}
拷贝文件为:429801毫秒 视频文件为:62mb
public static MessageEntity cpoyFile() throws IOException {
MessageEntity mess = new MessageEntity();
mess.setMessValue(true);
mess.setMessage("文件拷貝成功!");
FileInputStream fis = new FileInputStream(srcFile);// 原始文件对象
FileOutputStream fos = new FileOutputStream(destFile);// 目的地文件对象
byte[] buf = new byte[80 * 1024];// 数组大小
try {
if (!srcFile.exists()) {
mess.setMessValue(false);
mess.setMessage("源文件路徑不存在!");
return mess;
}
if (!destFile.getParentFile().exists()) {
destFile.getParentFile().mkdirs();
}
int bytes = 0;
while ((bytes = fis.read(buf, 0, buf.length)) != -1) {
fos.write(buf, 0, bytes);
fos.flush();
}
} catch (Exception e) {
mess.setMessValue(false);
mess.setMessage(e.getMessage());
return mess;
} finally {
fis.close();
fos.close();
}
return mess;
}
用byte[] 拷贝文件为:109毫秒 视频文件为:62mb
本文详细介绍了Java中的DataOutputStream和DataInputStream的基本语法,以及如何使用它们更高效地读写不同类型的数据。同时,对比了单字节、批量字节及缓冲流在文件拷贝中的性能差异,展示了缓冲流在提升文件拷贝效率方面的重要作用。
1214

被折叠的 条评论
为什么被折叠?



