i:input 输入 读取; o:output 输出 写入; 流:数据(字符、字节)1个字符=1字节 一个字节=8个二进制; 输入:把硬盘中的数据,读取到内存中使用; 输出:把内存中的数据,写入到硬盘中保存 ; 字节流:字节输入流 InputStream 字节输出流 OutputStream字节符:字符输入流 Reader字符输出流 Writer 一切皆为字节。 java.io.OutputStream:字节输出流 此抽象类是表示输出字节流的所有类的超类; 定义了一些子类共性的成员方法 void close():关闭此输出流并释放与此流有关的所有系统资源 void flush():刷新此输出流并强制写出所有缓冲的输出字节 void write(byte[] b):将 b.length 个字节从指定的 byte 数组写入此输出流。 abstract void write(int b):将指定的字节写入此输出流 FileOutputStream extends OutputStream 文件字节输出流 作用:把内存中的数据写入到硬盘的文件中
TestBufferedOutputStream { public static void main(String[] args) throws Exception { //创建缓冲字节输出流 FileOutputStream("e:\\aaa.txt"); BufferedOutputStream bos = new BufferedOutputStream(fos); //2. bos.flush(); } //关闭:默认刷新,并关闭节点流 bos.close(); } } 2.输出结果 ?
参考链接: Java中的字符流与字节流 Character Stream对比Byte Stream 目录 先序 1、Bits 工具类 2、输入流 InputStream 2.1、字节数组输入流 OutputStream 3.1、字节数组输出流 ByteArrayOutputStream 3.2、过滤输出流 FilterOutputStream 3.2.1、缓冲输出流 BufferedOutputStream 3.2.2、DataOutputStream 数据输出流 3.3、文件输出流 FileOutputStream 先序 下面这张图是来自这篇博客https://blog.csdn.net/u010145219 1、Bits 工具类 Bits 是一个工具类,一般是供 java io 包下的类使用的,用于处理字节,因为输入输出流分为 字节流 和 字符流。 和 off + 1 位置的2个字节拼成一个字符。
IO流分为输入流、输出流 输入输出流 又分为字节流、字符流 字节流 InputStream:抽象了应用程序读取数据的方式 OutputStream:抽象了应用程序写 出数据的方式 EOF = End (byte[] buf,int start, int size)读取数据到字节数组buf从buf的start位置开始存放size长度分数据 输出流的基本方法 out.write(int b) //写出一个 byte到流,b的低8位 out.write(byte[] buf) //将buf字节数组都写到流 out.write(byte[] buf, int start,int size) //字节数组buf 从start位置开始写size长度的字节到流 FileInputStream 具体实现了在文件上读取数据 FileInputStream 实现了向文件写出byte数据方法 public static > 使用原生缓冲的流 > 不使用缓冲的流1 2 3 4//计算时延 long start=System.currentTimeMillis(); long end=System.currentTimeMillis
本文讲解了 Java 中 字节流 OutputStream 类的语法,介绍了 OutputStream 类的应用场景,并给出了样例代码,字节输出流是用于将字节数据写入到输出目标的流。 一、什么是字节输出流 Java 字节输出流是用于将字节数据写入到输出目标的流,它以字节为单位进行写入操作,并提供了多种方法来写入不同类型的数据。 字节输出流是 OutputStream 类的子类,它提供了一系列的 write() 方法用于将字节数据写入到输出目标。常用的写入方法包括: write(int b):将指定的字节写入输出流。 ---- 四、字节输出流面试题 什么是 Java 字节输出流? Java 字节输出流的工作原理是什么? 与字符输出流相比,字节输出流有什么特点和优势? 在 Java 中如何使用字节输出流写入数据到文件? 如何在 Java 中使用字节输出流将数据写入网络连接? 在使用字节输出流写入文件时,如何确保写入的数据被刷新并且文件被正确关闭?
TestFileOutputStream { public static void main(String[] args) throws Exception { //1.创建流 FileOutputStream fos = new FileOutputStream("e:\\bbb.txt", true); //2. i++) { fos.write(str.getBytes()); } //3.关闭 fos.close(); } } 2.
之前介绍的 FileOutputStream、ByteArrayOutputStream 等都是基础流,在构造时候不需要传入其他流。但是 BFOS 的构造需要传入一个字节输出流。 基本用法 这个流的功能可以根据名字看出来,是一个缓冲输出流,可以当做一个缓冲区,将输出的字节暂时存在缓冲区里,那么当缓冲区满了之后干嘛呢? 为了将水放掉,就需要给一个输出的目的地,这个目的地就是构造方法中需要传入的下游的输出流。其默认的缓冲区大小是 8KB。 ? 之前我们的缓冲区用的是 BAOS,参考 java 字节流入门(内存数组流->文件流)。那用 BFOS 可不可以? 单缓冲区 假如我们在内存中只需要维护一个缓冲区的数据,即一个字节数组。 先比比速度,BFOS+FOS vs BAOS + FOS (内存中只维护一个 BAOS 或一个 BFOS ,并接一个文件输出流)哪种比较快?
1 package DEMO; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException ; 6 import java.io.OutputStream; 7 import java.util.Scanner; 8 9 /* 10 * 文件字节输出流 2014-7-29 11 * 1.给出输出流的目的地 12 * 2.创建指向目的地的输出流 13 * 3.人输出流把数据写入到目的地 14 * 4.关闭输出流 15 * 16 * 举例: 使用文件输出流写文件a.txt 17 * 措施:首先使用具有刷新功能的构造方法创建指向文件a.txt的输出流, 18 * 并向a.txt文件写入“新年快乐”,然后在选择使用不刷新文件的构造方法 47 System.out.println(file.getName()+"的大小:"+file.length()+"字节"); 48 out.write
, Flushable 这个抽象类是表示字节输出流的所有类的超类。 输出流接收输出字节并将其发送到某个接收器。 方法摘要: ? 下面我们用 字节输出流 OutputStream 的典型实现 FileOutputStream 来介绍: //1、创建目标对象,输出流表示把数据保存到哪个文件。 不写盘符,默认该文件是在该项目的根目录下 File target = new File("io"+File.separator+"a.txt"); //2、创建文件的字节输出流对象,第二个参数是 File("io"+File.separator+"a.txt"); File descFile = new File("io"+File.separator+"b.txt"); //2、创建输入输出流对象
一、什么是字节输出流 字节输出流(OutputStream)是 Java I/O 的核心组件之一,负责将字节数据写入输出目标。 2. 最后,记得关闭输出流和 Socket 连接以释放资源。 2. 数据压缩 字节输出流还可以与压缩流一起使用,实现数据的压缩功能。 字节输出流和字符输出流有什么区别? 答:字节输出流(OutputStream)和字符输出流(Writer)都是用于写入数据的流,但它们处理的数据单位不同。 此外,在写入完毕后要及时关闭流,以释放资源。 字节输出流和字节输入流的区别是什么? 答:字节输出流用于向输出目标写入字节数据,而字节输入流用于从输入源读取字节数据。
write(char[] ch),…,flash(),close(),… OutputStreamWriter常用的构造方法: 1)OutputStreamWriter(OutputStream out) 2) OutputStreamWriter(OutputStream out, String charset) 参数: OutputStream:字节输出流,将编码之后的字节数据写入文件中; charset :指定编码的名称,不区分大小写,不指定默认为UTF-8 2、实现步骤: 1、创建OutputStreamWriter对象,构造方法中可以传入参数字节输出流对象,即字节写入的文件,以及编码方式; 2、 调用write方法,把字符转换成字节存储到缓冲区中; 3、调用flash方法,将缓冲区的字节数据刷新到文件中; 4、释放资源。 ; //将转换后的字节文件存储到缓冲区 osw1.flush(); //释放资源 osw1.close(); } 字符转换流总结: 版权声明:本文内容由互联网用户自发贡献
字节码解析 结构 本位将详细介绍字节码的2进制结构和JVM解析2进制流的规范。 文中斜体 ~00~03 表示16进制流的从第一个字节开始的偏移位置。~1d 表示1行d列这1个字段,~00~03 表示0行0列到0行3列这4个字节。每2个16进制数表示一个字节。 4 指令集数 1 code code_length 代码内容 code_length exceptions_table_length 2 异常输出表数 1 exceptions_table 异常输出表 这个属性用于表示字节码与Java源码之间的关系。"LineNumberTable"是一个非必须属性,可以通过javac -g:[none|lines]命令来控制是否输出该属性。 到此,2进制流的异常处理介绍完毕。 总结 Jvm识别字节码的过程到此介绍完毕,按照这个识别过程可以理解JVM是怎么一步一步解析字节码的。
总结的基本概念如下: 1) 数据流: 一组有序,有起点和终点的字节的数据序列。包括输入流和输出流。 2) 输入流(Input Stream): 程序从输入流读取数据源。 因此Java中的流分为两种: 1) 字节流:数据流中最小的数据单元是字节 2) 字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。 基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。 Java中字符是采用Unicode标准,一个字符是16位,即一个字符使用两个字节来表示。 2. public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。 获取输出流,向服务器端发送信息:由Socket对象得到输出流 OutputStream output = socket.getOutputStream();//字节输出流
本章博客的知识点: 1、字节输出流和字符输出流的共存问题 2、转发时,两个servlet都输出信息的问题 详细知识,见OneServlet和TwoServlet源代码中的注释 转发:传参,访问顺序 1、字节输出流和字符输出流的共存问题 index.jsp: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> -- 1、字节输出流和字符输出流的共存问题---不能共存(跟get或post方式没关系)。即 :在同一个servlet响应中,不能同时采两种输出流。 另外:如果要用字节流输出中文,用write(byte[])方法 --> 字节输出流和字符输出流的共存问题 <form action ,同时写了response.getOutputStream();//获取字节输出流和response.getWriter();-是不能共存的,也就是说,只能写其中一个!!!
1、字节缓冲流 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,这是加入了数组这样的缓冲区效果,java本身在设计的时候,也考虑到了这样的设计思想(装饰设计模式后面讲解),所以提供了字节缓冲区流 字节缓冲输出流 BufferedOutputStream 字节缓冲输入流 BufferedInputStream 这种类被称为:缓冲区类(高效类) 构造方法可以指定缓冲区的大小,但是我们一般用不上 (OutputStream out) //创建基本的字节输出流对象 // FileOutputStream fos = new FileOutputStream("bos.txt"); //字节缓冲输出流对字节输出流对象进行包装 // BufferedOutputStream bos = new BufferedOutputStream(fos); // 简单写法 原因很简单,字节缓冲区流仅仅提供缓冲区,为高效而设计的。但是呢,真正的读写操作还得靠基本的流对象实现。 2、字节缓冲流复制数据练习 把d:\a.txt内容复制到当前项目目录下的b.txt中
参考下面代码,在Action中加一个方法: 1 // 导出excel 2 public String excel() throws Exception { 3 StringBuffer "excel"; 11 } 实质上是一个格式化的cvs文本文件,但是所有的excel/wps都能识别这种格式,导出的数据量不大,且没有复杂的线框格式要求时,这种处理方式最为方便 struts2的配置文件 : 1 <package name="cba_index" ...> 2 ... 3 <action name="index_*" method="{1}" class="CbaAction
public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。 字节从指定的字节数组写入此输出流。 从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。 ,构造方法中绑定要读取的数据源 2.创建一个字节输出流对象,构造方法中绑定要写入的目的地 3.使用字节输入流对象中的方法read读取文件 4.使用字节输出流中的方法write,把读取到的字节写入到目的地文件中 ""空字符串 使用步骤: 1.创建Properties集合对象,添加数据 2.创建字节输出流/字符输出流对象,构造方法中绑定要输出的目的地 3.使用Properties集合中的方法store,把集合中的临时数据
流的输入及输出均是对程序而言 字节流输入 创建File对象,关联文件 File src = new File("D:/aa", "a.txt"); 1)、创建以src为输入流的对象, Inputstream in = new FileInputStream(src); 2)、建立字节数组(byte[]),创建长度整形变量len byte[] car = new byte[10]; int len = 0; null) { try { in.close(); } catch (IOException e) { System.out.println("关闭输入流失败"); } } } 字节流输出 (src); 2)、建立字符串,转换为字节数组并写入 String str = "simple\n"; out.write(str.getBytes()); 3)、刷新输出流 out.flush(); flush()方法使流中的数据写入文件 2. 4)、读取结束后关闭输出流 out.close(); 进行异常处理 try { out = new FileOutputStream(src, true
2.字节流 java.io.OutputStream抽象类是表示字节输出流的所有超类,将指定的字节信息输出到目的地,他定义了字节输出流的基本共性功能方法 public void close :关闭此输出流并释放与此流关联的任何资源系统 public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。 () 关闭此输出流并释放与此输出流相关联的任何资源系统 public abstract int read() : 从输入流读取数据的下一个字节。 构造时使用系统默认的字符编码和默认字节缓冲区。 小贴士: 字符编码:字节与字符的对应规则。Windows系统的中文编码默认是GBK编码表。 idea中UTF-8 2. 4.字符输出流 java.io.Writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节 输出流的基本共性功能方法。
字节字符转换流 认识文本和文本文件 123 java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)文件是byte byte byte ...的数据序列文本文件是文本(char )序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果 字符流(Reader Writer)—->操作的是文本文本文件 123456 字符的处理,一次处理一个字符字符的底层任然是基本的字节序列字符流的基本实现 InputStreamReader 完成byte流解析为char流,按照编码解析 OutputStreamWriter 提供char流到byte流,按照编码处理 FileReader isr = new InputStreamReader(fis,"utf-8");//默认为项目编码可指定 fos = new FileOutputStream("G://path2. e.printStackTrace(); }finally { fis.close(); osw.close(); } } 字节字符读写流