黑马程序员技术交流社区
标题: 【广州校区】【原创】 IO流对象定义 [打印本页]
作者: 码农苏尼玛 时间: 2019-1-16 21:06
标题: 【广州校区】【原创】 IO流对象定义
IO流的分类:
1.流对象划分例子:
操作内存中的流对象:InputStreamReader
操作外界设备中的流对象:InputStream,OutputStream
如何区别:所有流对象后缀名称包含Reader又或者Writer 都是属于内存中操作的流对象,否则都视为外界设备流.其中PrintStream例外
2.数据流向划分:
输出流:写入数据 属于程序内存到外界设备 例如jvm运行的程序直接操作到本地硬盘上
输入流:当然事读取数据 与上面反则的道理
一般输入流名称带有Input 而输出流Output
3.流数据格式划分:
对于数据的处理,每个流不同都有其自身操作的优势.
字符流处理声音或者图片等数据比较好,比如InputStream
字符流处理文本格式的数据如InputStreamReader
区分方法 操作内存是字符流,操作外界设备属于字节流
4.流数据包装
原始流:实例化对象过程不需传入另外的流为自己构造参数成为原始流
包装流:实例化对象需要传入另外流为自己构造参数叫包装流
下面是一些流对象使用demo
/*
* 字节流缓冲区流读写字节数组
*/
private static void copyFile(File srcFile, File destFile) throws IOException {
// 计数器加一
count ++;
// 创建字节输入流
FileInputStream fis = new FileInputStream(srcFile);
// 创建字节输出流
FileOutputStream fos = new FileOutputStream(destFile);
int len = 0;
byte[] buffer = new byte[1024];
// 循环读取数据
while((len = fis.read(buffer)) !=-1) {
// 利用输出流往输出目的写数据
fos.write(buffer,0,len);
}
// 关闭资源
fis.close();
fos.close();
}
//文件输入流写入数据
public static void calc(Character a) throws IOException {
Map<Character,Integer> maps = new HashMap<>();
FileInputStream fis = new FileInputStream("lhh.txt");
int len = -1;
while ( (len = fis.read()) != -1){
char ch = (char) len;
if(maps.get(ch) == null){
maps.put(ch,1);
}else {
Integer cout = maps.get(ch);
maps.put(ch,cout+1);
}
}
System.out.println(a+"出现"+maps.get(a)+"次");
}
BufferedWriter 字符缓冲流操作
private static void reverseCopy() throws Exception
{
BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt"));
bw.write("我爱黑马");
bw.newLine();
bw.write("123456");
bw.close();
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
String line = null;
List<String> list = new ArrayList<>();
while ((line = br.readLine()) != null) list.add(line);
//br.close();
Collections.reverse(list);
BufferedWriter bw0 = new BufferedWriter(new FileWriter("test1.txt"));
for(String s : list)
{
bw0.write(s);
bw0.newLine();
}
bw0.close();
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |