1. IO流(输入流、输出流)
字节流、字符流
2. 字节流
InputSteam 抽象了应用程序读取数据的方式
OutputSteam抽象了应用程序写出数据的方式
EOF = End 读到-1就是到结尾
3. 输入流——基本方法
int b = in.read();//读取一个字节无符号填充到int的低八位。-1是EOF
in.read(byte[] buf) //读取数据并填充到字节数组buf中
int.read(byte[] buf ,int start, int size),//读取数据并填充到字节数组buf中,从start开始存放size长度
4. 输出流基本方法
out.write(int b) //写出一个byte到流,b的低八位
out.write(byte[] buf)//将buf字符数组都写入到流
out.wrtie(byte[] buf ,int start, int size)
5. FileInputStream—>具体实现了在文件上读取数据
public class IOUtil {
/**
* 读取文件指定内容,按照16进制输出到控制台
* 并且没输出10个byte换行
* @param filename
* @throws IOException
*/
public static void printHex(String filename) throws IOException {
//把文件作为字节流作为读的操作
FileInputStream in = new FileInputStream(filename);
int b;
int i = 1;
while((b=in.read())!=-1) {
System.out.print(Integer.toHexString(b)+" ");
if (i++%10==0) {
System.out.println();
}
}
in.close();
}
}
public static void printHexByteArrays(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);//一次性读完,说明字节数组足够大
int j =1;
for(int i = 0;i<bytes;i++) {
if(buf[i]<=0xf) {
System.out.print("0");
}
System.out.print(Integer.toHexString(buf[i])+" ");
if(j++%10==0) {
System.out.println();
}
}*/
int bytes = 0;
int j =1;
while((bytes = in.read(buf, 0, buf.length))!=-1) {
for(int i= 0; i<bytes;i++) {
System.out.print(Integer.toHexString(buf[i] & 0xff)+" ");
}
if(j++%10==0) {
System.out.println(" ");
}
}
}