package com.xx.InputAndOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class InputStreamTesting {
public static void main(String[] args) throws IOException {
String dir="C:\\Users\\杨茜玲\\Desktop";
String name="aa.txt";
//生成一个dir文件下的名为name的文件
File file=new File(dir,name);
//将该文件传给输入流
InputStream inputStream=new FileInputStream(file);
//testRead(inputStream);
//testSkip(inputStream);
testReadByteArr(inputStream);
}
public static void testReadByteArr(InputStream inputStream) throws IOException{
//需要一次性读取多个字符相当于读取一个数组,如果buf的长度为0,则不读取任何字节并返回0,每次读取的字节数最多等于buf的长度
byte[] buf=new byte[1024];
//定义一个变量用于判断是否读到了尾部
int length;
//length用于返回实际读取的字节数,再次读取时如果已经到达流末尾而没有可用的字符,则返回-1
while ((length=inputStream.read(buf))!=-1){
//System.out.println(length);
System.out.println(new String(buf,0,length));
//可以防止中文乱码,可换成UTF-8或者GBK
//UTF-8和GBK的区别:操作的中文内容多则推荐GBK:GBK中英文也是两个字节,用GBK节省了空间;UTF-8 编码的中文使用了三个字节
//如果是英文内容多则推荐UFT-8:因为UFT-8里面英文只占一个字节,UTF-8编码的中文使用了,三个字节
//System.out.println(new String(buf,0,length,"GBK"));
inputStream.close();
}
}
public static void testRead(InputStream inputStream) throws IOException{
//输入流读取一个字节,在java中一个英文字母占一个字节,一个字符占两个字节,一个中文汉字属于一个字符,占两个字节
int read=inputStream.read();
System.out.println(read);
System.out.println((char)read);
inputStream.close();
}
public static void testSkip(InputStream inputStream) throws IOException{
//跳过前面两个字符
long skipSize=inputStream.skip(2);
System.out.println(skipSize);
//跳过之后读取
int read=inputStream.read();
System.out.println((char)read);
inputStream.close();
}
}