数据流_小记
程序员文章站
2022-03-23 09:07:59
...
数据流:针对最底层的数据,进行最基本的字节字符数据的读写操作。
构造方法:
public DataInputStream(InputStream in);//基础的InputStraeam构建DataInputStream
public DataOutputStream(OutputStream out);//基础的OutputStraeam构建DataOutputStream
写入字符串:
writeBytes(String S)字节
writeChars(String S)字符
writeUTF
ByteArrayInputStream和ByteArrayOutStream(重点)
内存操作流:针对内存的数据进行操作的,程序一结束,这些内存中的数据就消失掉了!
特点:针对小文件进行操作!(聊天室项目中使用它进行发送文件)
ByteArrayOutputStream:
public ByteArrayOutputStream():创建默认的缓冲区大小的内存操作输出流(单位是字节)
成员方法:
public byte[] toByteArray()创建一个新分配的 byte 数组(将内存操作输出流对象转换成字节数组)
void reset():重置内存操作输出流
ByteArrayInputStream:内存操作输入流:
public ByteArrayInputStream(byte[] buf):参数数一个字节数组(缓冲数组)
package Day19_DataInOutput;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
/**
* @author Aoman_Hao
*/
public class ByteArrayTest1 {
public static void main(String[] args) throws IOException {
// 创建一个新的字节数组输出流,缓冲区大小为默认大小(一字节8位)
ByteArrayOutputStream bao = new ByteArrayOutputStream();
bao.write("hello".getBytes());
System.out.println(bao);
bao.close();// close无定义,即此流可以不关闭
// 创建一个字节数组输入流
byte[] by = bao.toByteArray();
ByteArrayInputStream bai = new ByteArrayInputStream(by);
int len = 0;
while((len = bai.read())!=-1){
System.out.print((char)len);
}
bai.reset();//重置流
}
}
处理流–隐藏了底层设备上节点流的差异,对外提供方便的输入输出方法,使用处理流包装节点流,程序通过处理流来执行输入输出功能,让节电流和底层的IO设备文件交互.
处理流的构造器参数不是物理节点,而是存在的流
打印流:
字节打印流:PrintStream
字符打印流:PrintWriter
* 打印流特点:
1)在复制文件的,打印流不能操作数据源,只能操作目的地的数据(只能输出数据)
2)打印流可以有自动刷新的功能
3)打印流可以直接针对文本文件进行操作:
*
* 什么情况下是直接可以针对文本文件进行操作?
* 查API的时候,看流中构造方法,只要构造方法的参数有File类或者是String类型,都可以针对文本文件进行操作
* FileInputStream
* FileOutputStream
* FileReader
* FileWriter
*
* PrintWriter:
* 构造方法:
* public PrintWriter(String fileName)
package Day19_DataInOutput;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
/**
* @author Aoman_Hao
*/
public class PrintInOutput {
public static void main(String[] args) {
try(
//使用PrintStream处理流包装了FileOutPutStream节点输出流
PrintStream ps = new PrintStream(new FileOutputStream("d:\\Java\\JavaTest\\Aoman_Hao.txt")))
{
ps.print("aa");
}
catch (IOException e) {
e.printStackTrace();
}
}
}
使用处理流BufferedReader,BufferedWriter来复制文件的内容到另一个新文件
package Day19_DataInOutput;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* @author Aoman_Hao
*/
public class BufferReadTest {
public static void main(String[] args) {
try(
//复制文件
//用BufferReader处理流包装字符输入流FileReader
BufferedReader br = new BufferedReader(new FileReader(
"d:\\Java\\JavaTest\\Aoman_Hao.txt"));
//用
BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\Java\\Aoman_5.txt"));
){
//使用BufferedReader中的特有功能读写操作
String line = null;
while((line = br.readLine())!=null){
bw.write(line);//写数据
bw.newLine();//换行
bw.flush();//刷新流
}
}catch (IOException e) {
e.printStackTrace();
}
}
}
PrintWriter:有自动刷新功能:
* public PrintWriter(Writer out,boolean autoFlush)
* 第二个参数指定为true,则启动自动刷新
* PrintWriter pw = new PrintWriter(new FileWriter(“pw.txt”),true) ;
* 加入自动刷新功能并且在写数据的时候,使用println():换行
*
* println(“hello”)
相当于:
* pw.write(“”) ;
* pw.newLine() ;
* pw.flush() ;
PrintWriter自动刷新
package Day19_DataInOutput;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
/**
* @author Aoman_Hao
*/
public class PrintWriterTest {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new FileReader(
"d:\\Java\\JavaTest\\Aoman_Hao.txt"));
//public PrintWriter(Writer out,boolean autoFlush)第二个参数指定为true,则启动自动刷新
PrintWriter pw = new PrintWriter(new FileWriter("d:\\Java\\Aoman_7.txt"));
String str = null;
while((str = br.readLine() )!=null){
pw.println(str);
}
pw.close();
br.close();
}
}
system.in屏幕输出:
package Day19_DataInOutput;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @author Aoman_Hao
*/
public class SystemInOut {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入:");
String line = br.readLine();
System.out.println("输出:"+line);
}
}
使用BufferedReader完成了录入数据:
使该流封装字符转换输入流,然后使用字符转换输入流封装字节流
层层封装:
PrintStream ps = System.out ;
//写入一个分隔符:newLine()是BufferedWriter类中的方法
//BufferedWriter bw = new BufferedWriter(ps) ;
//将字节打印流转换成字符流
OutputStreamWriter osw = new OutputStreamWriter(ps) ;
//创建字符缓冲输出流对象
BufferedWriter bw = new BufferedWriter(osw) ;*/
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("aaa");
bw.newLine();
bw.close();
输出:aaa