黑马程序员——JAVA基础之IO流缓冲区,转换流,字节流
------- android培训、java培训、期待与您交流! ----------
字符流的缓冲区
缓冲区的出现提高了对数据的读写效率。
对应类
• BufferedWriter
• BufferedReader
缓冲区要结合流才可以使用。
在流的基础上对流的功能进行了增强。
字符写入流缓冲区:
该缓冲区中提供了一个跨平台的换行符。 newLine();
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException; class BufferedWriterDemo
{
public static void main(String[] args) throws IOException
{
//创建一个字符写入流对象。
FileWriter fw = new FileWriter("BufferedWriterDemo.txt"); //为了提高字符写入流效率。加入了缓冲技术。
//只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
BufferedWriter bw = new BufferedWriter(fw); for (int i=0; i<5; i++)
{
bw.write("abcde");
bw.newLine();
bw.flush();//记住,只要用到缓冲区,就要记得刷新。
}
//其实关闭缓冲区,就是在关闭缓冲区中的流对象。
bw.close();
}
}
字符读取流缓冲区:
该缓冲区提供了一个一次读一行的方法 readLine,方便于对文本数据的获取。
当返回null时,表示读到文件末尾。
readLine方法返回的时候只返回回车符之前的数据内容。并不返回回车符。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException; class BufferedReaderDemo
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("BufferedWriterDemo.txt"); BufferedReader br = new BufferedReader(fr); String line = null; while ((line = br.readLine()) != null)
{
System.out.println(line);
}
br.close();
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; /**
*
* 通过缓冲区复制文件练习
*
*/
class BufferedCopyTest
{
public static void main(String[] args)
{
BufferedReader br = null;
BufferedWriter bw = null; try
{
br = new BufferedReader(new FileReader("E:\\JAVA\\Demo\\BufferedWriterDemo.txt"));
bw = new BufferedWriter(new FileWriter("E:\\JAVA\\Demo\\BufferedCopyTest.txt")); String line = null;
while ((line = br.readLine()) != null)
{
bw.write(line);
bw.newLine();
bw.flush();
}
}
catch (IOException e)
{
throw new RuntimeException("读写出错");
}
finally
{
try
{
if (br != null)
{
br.close();
}
}
catch (IOException e)
{
throw new RuntimeException("读取关闭出错");
}
try
{
if (bw != null)
{
bw.close();
}
}
catch (IOException e)
{
throw new RuntimeException("写入关闭出错");
}
}
}
}
字节流:
基本操作与字符流类相同。
但它不仅可以操作字符,还可以操作其他媒体文件。
字节流的缓冲区:同样是提高了字节流的读写效率。
转换流:
InputStreamReader,OutputStreamWriter
转换流的由来:
• 字符流与字节流之间的桥梁
• 方便了字符流与字节流之间的操作
转换流的应用:
• 字节流中的数据都是字符时,转成字符流操作更高效。
字符和字节之间的桥梁,通常,涉及到字符编码转换时, 需要用到转换流。
<span style="font-size:14px;">import java.io.FileOutputStream;
import java.io.IOException; class OutputStreamDemo
{
public static void main(String[] args) throws IOException
{
FileOutputStream fs = new FileOutputStream("OutStreamDemo.txt"); fs.write("abcde".getBytes()); fs.close();
}
}
</span>
<span style="font-size:14px;">import java.io.FileInputStream; class InputStreamDemo
{
public static void main(String[] args) throws Exception
{
FileInputStream fs = new FileInputStream("OutStreamDemo.txt"); byte[] by = new byte[1024];
int num = 0;
while ((num = fs.read(by)) != -1)
{
System.out.println(new String(by,0,num));
}
fs.close();
}
}
</span>
为什么用字节流处理非文本,字符流处理文本?
字节流是用八位的字节直接代表图片进行转换。
字符流在复制图片的时候,有一些代码能在编码表中找到编码,就转换成编码,但是还有好多找不到的代码,
JVM就会用一些类似的编码代替,文件就会改变了,所以打不开
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; /**
* 复制一个图片
* 思路:
* 1,用字节读取流对象和图片关联。
* 2,用字节写入流对象创建一个图片文件。用于存储获取到的图片数据。
* 3,通过循环读写,完成数据的存储。
* 4,关闭资源。
*
*/ class PictureCopyTest
{
public static void main(String[] args)
{
FileInputStream fis = null;
FileOutputStream fos = null; try
{
fis = new FileInputStream("photo.jpg");
fos = new FileOutputStream("photocopy.jpg"); byte[] by = new byte[1024];
int num = 0;
while ((num = fis.read(by)) != -1)
{
fos.write(by,0,num);
}
}
catch (IOException e)
{
throw new RuntimeException("读写失败");
}
finally
{
try
{
fis.close();
}
catch (IOException e)
{
throw new RuntimeException("读取关闭失败");
}
try
{
fos.close();
}
catch (IOException e)
{
throw new RuntimeException("写入关闭失败");
}
}
}
}
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; /**
* 通过缓冲区演示复制视频
*
*/ class MoveCopyTest
{
public static void main(String[] args)
{
BufferedInputStream bis = null;
BufferedOutputStream bos = null; try
{
bis = new BufferedInputStream(new FileInputStream("dog.mp4"));
bos = new BufferedOutputStream(new FileOutputStream("pipi.mp4")); byte[] by = new byte[1024];
int num = 0;
while ((num = bis.read(by)) != -1)
{
bos.write(by,0,num);
}
}
catch (IOException e)
{
throw new RuntimeException("复制失败");
}
finally
{
try
{
bis.close();
}
catch (IOException e)
{
throw new RuntimeException("读取关闭失败");
}
try
{
bos.close();
}
catch (IOException e)
{
throw new RuntimeException("写入关闭失败");
}
}
}
}
------- android培训、java培训、期待与您交流! ----------
黑马程序员——JAVA基础之IO流缓冲区,转换流,字节流的更多相关文章
- 黑马程序员——JAVA基础之IO流FileReader,FileWriter
------- android培训.java培训.期待与您交流! ---------- IO(Input Output)流 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 J ...
- 黑马程序员_Java基础:IO流总结
------- android培训.java培训.期待与您交流! ---------- IO流在是java中非常重要,也是应用非常频繁的一种技术.初学者要是能把IO技术的学透,java基础也就能更加牢 ...
- 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流
------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...
- 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)
正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G QQ 1481135711 这是我总 ...
- 黑马程序员----java基础笔记中(毕向东)
<p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...
- 黑马程序员----java基础笔记上(毕向东)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...
- 黑马程序员——JAVA基础之反射
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Java 反射是Java语言的一个很重要的特征,它使得Java具体了"动态 ...
- 黑马程序员——JAVA基础之编码表
------- android培训.java培训.期待与您交流! --------- 字符编码 字符流的出现为了方便操作字符. 更重要是的加入了编码转换. 通过子类转换流来完成. • I ...
- 黑马程序员——JAVA基础之泛型和通配符
------- android培训.java培训.期待与您交流! ---------- 泛型: JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...
随机推荐
- (转载)U-boot启动完全分析
1.1 U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 Ø 硬件设备初始化 Ø 加载U-Boot第二阶段代码到RAM空间 Ø 设置好栈 Ø ...
- python中的@
一.函数修饰符 '@' 用做函数的修饰符,可以在模块或者类的定义层内对函数进行修饰, 出现在函数定义的前一行,不允许和函数定义在同一行 一个修饰符就是一个函数,它将被修饰的函数作为参数,并返回修饰后的 ...
- 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的
在MVC中添加授权认证配置之后报了这样的错 原因是在整个MVC项目中有两个Web.Config文件存在authentication节点,一个Web.Config文件在View目录下,一个在根目录下 解 ...
- Python’s SQLAlchemy vs Other ORMs[转发 5] PonyORM
PonyORM PonyORM allows you to query the database using Python generators. These generators are trans ...
- mysql索引的使用[上]
数据库的explain关键字和联合索引优化: 本篇文章简单的说一下mysql查询的优化以及explain语句的使用.(新手向) 因为这篇文章是面向查询的,直观一点,首先我们创建一个表:student ...
- 用jQuery Mobile搭建一个简单的手机页面
1.新增html页面. 2.声明html5Document. 3.载入jQuery Mobile Css.jQuery与jQuery Mobile链接库. 4.使用jQuery Mobile定义的ht ...
- genymotion模拟器相关知识
最近学react用到了Genymotion模拟器,但是因为墙的原因,遇到了很多阻碍,例如以下几种: 这里分享一个手动下载模拟器的方法. 1. 找到以下路径:C:\Users\Administrato ...
- LINQ 嵌套查询
直接代码: //获取教材下的章跟篇 IList<Chapter> chapters = EntAppFrameWorkContext.DomainModelService.ExtenedS ...
- 一口气学会Linq
千万别被这个页面的滚动条吓到!!! 我相信你一定能在30分钟之内看完它!!! 在说LINQ之前必须先说说几个重要的C#语言特性 一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之 ...
- html a 链接标签title属性换行鼠标悬停提示内容的换行效果
鼠标经过悬停于对象时提示内容(title属性内容)换行排版方法,html title 换行方法总结. html的title属性默认是显示一行的.如何换行呢? 这里DIVCSS5总结介绍两种换行方法为大 ...