您的位置:首页 > 其它

输入输出流(IO)

2016-11-18 11:17 351 查看

输入输出流(IO)

字节流

InputStream,所有输入字节流的基类,抽象类

FileInputStream,读取文件的输入字节流

BUfferedInputStream,缓冲输入字节流,该类内部维护了一个 8kb 的字节数组,该类的出现是为了提高读取数据的效率

OutputStream,所有输出字节流的基类,抽象类

FileOutputStream,向文件输出字节数据

BufferedOutputStream,缓冲输出字节流,该类内部维护了一个 8kb 的字节数组,该类的出现是为了提高写数据的效率

什么情况使用字节流:读取到数据不需要经过编码或者解码的情况下使用字节流,比如:图片数据

字符流

字符流 = 字节流 + 编码(解码)

Reader,所有输入字符流的基类,抽象类

FileReader,读取文件字符的输入字符流

BufferedReader,缓冲输入字符流,它内部维护了一个8192个长度的字符数组,该类出现的目的是为了提高读取文件字符的效率并且拓展了功能(BufferedReader.readLine())

Writer,所有输出字符流的基类,抽象类

FileWriter,向文件输出字符数据的输出字符流

BufferedWriter,缓冲输出字符流,它内部维护了一个8192个长度的字符数组,该类出现的目的是为了提高写文件字符的效率并且拓展了功能(BufferedWriter.newLine())

什么情况下使用字符流:如果读写需要编码和解码的数据(字符数据),这时候我们就使用字符流

转换流

InputSrteamReader,输入字节流 -> 输入字符流

OutputStreamWriter,输出字节流 -> 输出字符流

/** 字节流转字符流 */
public static void testOutput() throws Exception{
Socket socket = new Socket(InetAddress.getLocalHost(),9090);
//获取到socket的输出字节流
OutputStream outputStream = socket.getOutputStream();
//把输出字节流转换成输出字符流
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
outputStreamWriter.write("不饿!");
}


转换流的作用:

可以把对应的字节流转换成字符流使用。

/** 将输入控制台的一行字符数据显示出来 */
public static void testInput() throws Exception{
InputStream in = System.in;
//int content = in.read();//read()方法每次只会读取到一个字节的数据
//创建转换流,把输入字节流转成输入字符流
InputStreamReader inputStreamReader = new InputStreamReader(in);
//创建缓冲输入字符流,使用readLine()方法进行整行数据的读取
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
System.out.println(bufferedReader.readLine());
}


可以指定码表进行读写文件的数据。因为FileReader和FileWriter这两个类默认是使用的是gbk编码,不能指定读写文件数据的编码。

/** 指定utf-8码表把数据写出到文件上 */
public static void writeFile() throws IOException{
FileOutputStream fileOutputStream = new FileOutputStream("F:\\a.txt");
//创建转换流,将输出字节流转成输出字符流,并制定utf-8码表进行编码
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"utf-8");
outputStreamWriter.write("大家好");//中文在utf-8码表中占三个字节
outputStreamWriter.close();
}

/** 指定utf-8码表进行读取文件上的数据 */
public static void readFile() throws IOException{
FileInputStream fileInputStream = new FileInputStream("F:\\a.txt");
//创建转换流,将输入字节流转成输入字符流,并制定utf-8码表进行解码
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"utf-8");
int content = 0;
while((content = inputStreamReader.read())!=-1){
System.out.println((char)content);
}
inputStreamReader.close();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息