您的位置:首页 > 编程语言 > Java开发

Java之字节流(文件输入、输出流)

2016-08-08 11:02 288 查看
IO(输入流,输出流)

字节流

1.字节流

1)InputStream、OutputStream

  InputStream抽象的应用了程序读取数据的方式

  OutputStream抽象的应用了程序写出数据的方式

  

2)EOF = End 读到-1就表示读到了文件结尾

 

3)输入流基本方法

  int b = in.read();//读取一个字节无符号填充到int低八位.-1是EOF

  in.read(byte[] buf);//读取数据填充到字节数组buf

  in.read(byte[] buf,int start,int size);//读取数据填充到字节数组buf,从buf的start位置开始存放size长度数据

 

4)输出流基本方法

  out.write(int b);//写一个byte到流,b的低8位

  out.write(byte[] buf);//将buf字节数组写入流

  out.write(byte[] buf,int start,int size);//字节数组buf从start位置开始写size个长度的字节到流

 

5)FileInputStream----->具体实现在文件上的读取

6)FileOutputStream 实现了向文件中写出byte数据的方法

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class IOUtil {
/**
* 读取指定文件内容,按16进制输出到控制台
* 并且每输出10个byte换行
* 单字节读取不适合大文件,大文件效率低
*/
public static void printHex(String FileName) throws IOException {
//把文件作为字节流进行读操作
FileInputStream in = new FileInputStream(FileName);
int b;
int i = 1;
while((b = in.read()) != -1){
if(b <= 0xf){
//单位数前面补0
System.out.print("0");
}
System.out.print(Integer.toHexString(b) + " ");
if(i++%10 == 0)
System.out.println();;
}
in.close();
}

public static void printHexByByteArray(String FileName) throws IOException {
FileInputStream in = new FileInputStream(FileName);
byte[] buf= new byte[20 * 1024];
/* 从in中批量读取字节,放入到buf这个字节数组中,
* 从第0个位置开始放,最多放buf.length个
* 返回的是读到的字节个数
* 批量读取,对大文件而言效率高,也是我们最常用的读取文件方式
*/
int bytes = in.read(buf,0,buf.length);//一次性读完,说明字节数组足够大
for(int i = 0;i < bytes;i++){
//如果buf[i]>=0并且buf[i]<=15,前面添0
if(buf[i] <=0xf &&buf[i] >=0)
System.out.print("0");
//&0xff,byte类型8位,int类型32位,为了避免数据转换错误,通过0xff将int的高24位清零
System.out.print(Integer.toHexString(buf[i]&0xff)+" ");
if((i+1)%10==0)
System.out.println();
}
in.close();
}
public static void copyFile(File srcFile,File deskFile) throws IOException {
if(!srcFile.exists())
throw new IllegalArgumentException("文件"+srcFile+"不存在!");
if(!srcFile.isFile())
throw new IllegalArgumentException(srcFile+"不是文件!");
FileInputStream in = new FileInputStream(srcFile);
FileOutputStream out = new FileOutputStream(deskFile);
byte[] buf = new byte[8 * 1024];
int b;
while((b = in.read(buf,0,buf.length))!=-1){
out.write(buf, 0, b);
out.flush();//最好加上
}
out.close();
in.close();
}
}
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutDemo {

public static void main(String[] args) throws IOException {
//如果文件不存在,则直接创建;如果文件存在,则删除后创建
FileOutputStream out =new FileOutputStream("demo/out.dat");
out.write('A');//写出了A的低8位
out.write('B');//写出了B的低8位
int b = 10;//write只能写8位,如果要写出一个整数,则需要写4次,每次8位
out.write(b >>> 24);
out.write(b >>> 16);
out.write(b >>> 8);
out.write(b);
byte[] gbk = "中国".getBytes("gbk");
out.write(gbk);
out.close();
IOUtil.printHex("demo/out.dat");

}

}

import java.io.File;
import java.io.IOException;

public class IOUtilTest {

public static void main(String[] args) {
try {
long start = System.currentTimeMillis();
//IOUtil.printHex("e:\\javaio\\日记.txt");
//IOUtil.printHexByByteArray("e:\\javaio\\日记.txt");
IOUtil.copyFile(new File("e:\\javaio\\日记.txt"), new File("e:\\javaio\\日记1.txt"));
System.out.println();
long end = System.currentTimeMillis();
System.out.println(end-start);
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}

}




 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java IO