黑马程序员——Java学习总结:转换流和流的操作总结

本文介绍Java中如何实现从键盘录入数据,并将其保存到文件中。涉及InputStream、InputStreamReader及BufferedReader等类的使用,同时讲解了字符流与字节流的转换。

如何实现读取键盘录入?

System.out:对应的是标准输出设备,控制台 
System.in:对应的标准输入设备,键盘

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">代码:
InputStream <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span>=System<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.in</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
  int by=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.read</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
  System<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.out</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.println</span>(by)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
结束录入 

  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.close</span>()<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul>

转换流

读取转换流:InputStreamReader 
写入转换流:OutputStreamReader

读取转换流:InputStreamReader 字节流通向字符流的桥梁

步骤 
1.获取键盘录入对象 
Inputstream in=System.in 
2.将字节流对象转换成字符流对象,使用转换流InputStreamReader 
InputStreamReader isr=new InputStreamReader(in); 
3.提高效率使用字符流缓冲区 BufferedReader进行读取 
BufferedReader bf=new BufferedReader(is); 
String line=null; 
while((line=bf.readLine())!=null) 

if(“over”.equals(line)) 
break; 
sop(line); 

bufr.close;

写入转换流:OutputStreamReader 字符流通向字节流的桥梁

步骤 
1.获取输出对象 
Outputstream out=System.out 
2.将字符流对象转换成字节流对象,使用转换流OutputstreamWriter 
OutputstreamWriter osw=new OutputstreamWriter(out); 
3.提高效率使用字符流缓冲区 BufferedWriter进行写入 
BufferedWriter bw=new BufferedWriter(osw); 
String line=null; 
while((line=bf.readLine())!=null) 

if(“over”.equals(line)) 
break; 
bw.write(line); 
bufw.newLine(); 

bufr.close;


操作流规律总结:

流操作基本规律: 
两个明确: 
1.明确源和目的

源:输入流。InputStream字节流 Reader 字符流 
目的:输出流 OutPutStream 字节流 Writer 字符流

2.操作的数据是否是纯文本

是 就是字符流 如果设备是键盘 就将字节流转换为字符流 
不是 就是 字节流

3.当体系明确后,在明确要是用那个具体的对象 
通过设备来区分 
源设备 内存 硬盘 键盘 
目的设备 内存 硬盘 控制台

4.是否需要提高效率 
是 BufferedReader BufferedInputStream 
否 BuffreredWriter BufferedOutputStream

案例分析 :

1.将一个文本文件中的数据存储到另一个文件中,复制文件

源: InputStream字节流 Reader 字符流 
是否是纯文本 是 Reader 
设备: 文件 操作文件的对象 就是FileReader 
是否需要高效 
是 BufferedReader 
FileReader fr=new FileReader(“a.txt”); 
BufferedReader bufr=new BufferedReader(fr);

目的 OutPutStream 字节流 Writer 字符流 
是否是纯文本 :是 Writer 
设备: 文件 写入文件的对象 就是 FileWriter 
是否需要高效 是 BufferedWriter

FileWriter fw=new FileWriter(“b.txt”); 
BufferedWriter bufw=new BufferedWriter(fw);

2.将一个图片文件数据存储到另一个文件中,复制文件。

分析 
源: 
是否是纯文本 : 不是 InputStream 
设备 文件 就是 FileInputStream 
是否高效 是 
BufferedInputStream

FileInputStream isr=new FileInputStream(“a.jpg”); 
BufferedInputStream bufis=new BufferedInputStream(isr); 
目的 
是否纯文本 :不是 OutPutStream 
设备:文件 FileOutPutStream 
是否高效 是 
BufferedOutputStream 
FileOutPutStream osw=new FileOutPutStream(“b.jpg”); 
BufferedOutputStream bufos=new BufferedOutputStream(osw);

3.需求将键盘录入的数据保存到一个文件中 。

源:键盘 字节流 
是否纯文本 Reader 
设备 :键盘 ,对应的对象时 System.in 对应的是字节流 ,为了操作方便 转成字符流 
既然明确了Reader 就将System.in 转换成字符流 InputStreamReader

InputStreamReader isr=new InputStreamReader(System.in);

需要高效吗 ?

BufferedReader bufr=new BufferedReader(isr);

目的: 文件 
是否纯文本 是 Writer 
设备:文件 FileWriter 
需要高效吗? 
是 BufferedWriter

4.扩展 :想要吧录入的数据按照指定的编码表(utf-8)将数据存到文件中 
目的:OutPutStream 字节流 Writer 字符流 
是否是存文本:是 Writer 
设备 :文件 fileWriter 
默认编码表是 gbk 
编码标只有转换流可以指定。所以要使用的对象是写入转换流 OutputStreamWriter 
转换流需要接受一个自己输出流,操作字节输出流的是FileOutputStream 
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream(“b.txt”),”utf-8”); 
BufferedWriter bufw=new BufferedWriter (osw);

「LLM那些事」系列第 4 篇《上下文窗口的边界》,文章连接:https://blog.csdn.net/houwenjin/article/details/163999753。 演示什么:在「预测」Sheet 的黄色格子里输入一句话(默认「来泡一杯」),四个「模型」——分别只统计最后 1 / 2 / 3 / 4 个字的 n-gram 查表——同时预测下一个字。同一个输入,看的上下文越长,候选越少、预测越确定: ┌────────────────┬──────────┬───────────────┬──────┐ │ 只看最后几个字 │ 用的前缀 │ 候选下一字数 │ 预测 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 1 个 │ 杯 │ 3(茶/子/水) │ 模糊 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 2 个 │ 一杯 │ 2(茶/水) │ 收窄 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 3 个 │ 泡一杯 │ 1(茶) │ 确定 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 4 个 │ 来泡一杯 │ 1(茶) │ 确定 │ └────────────────┴──────────┴───────────────┴──────┘
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值