- 浏览: 890980 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
Java中的I/O(input/output)流是用来处理设备之间数据的传递的,用来操作流的对象都存放在JAVA.IO包中。
IO流的分类:
按流向: 输入流和输出流
按操作对象: 节符流和字节流
按功能:节点流和处理流
JAVA中所提供的所有的流类型都继承于以下四个抽象流基类:
字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
因为都是抽象的类,所以只能使用继承了基类的类来创建对象引用。
简单介绍一下:
InputStream:输入字节数据用的类。常用方法:
abstract int read() 读取一个字节并以整数形式返回(0-255),如果返回-1则到了输入流的末尾。
int read(byte [] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中,返回读入缓冲区的总字节数;如果因为已经到达 流末尾而不再有数据可用,则返回 -1。
int read(byte []b,int off,int len) 读取len个字节并存入字符数组b中,返回实际读取的字节数,如果读到末尾返回-1.
void close() 关闭并释放内存资源。
long skin(long n) 跳过N个字节不读,返回实际跳过的字节数。
int available() 返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。
Reader: 输入字符数据用的类
常用方法与InputStream基本相同,没有int available()方法。
OutputStream:输出字节数据用的类。常用方法:
void write(int b) 向输出流写入一个字节数据,为参数b的低8位
void write(byte [] b) 将一个字节类型数组中的数据写入输出流
void write(byte [] b,int off,int len) 将制定数组从制定位置开始到len结束的部分写入输出流
void flush() 将输出流中缓冲的数据全部写出到目的地
void close() 关闭流并释放内存资源
Writer:输出字符数据用的类
常用方法与OutputStream类似,不过Writer的Write()方法支持对字符数组、单个字符、字符串、字符串一部分、字符数组一部分的输出。
缓冲流:
缓冲流存在的前提必须是相应的流先存在,它对数据的读写提供了缓冲的功能,提高了对数据的读写效率,对流的功能进行了相应的增强。
JAVA提供了四种缓冲流:BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream 。
BufferedReader 提供了readLine()方法方便用于读取一行字符串(\r \n标示)。
BufferedWriter 提供了newLine()方法用于写入一个行分隔符。
对于输出的缓冲流,写出的数据会先在缓存中存放,使用flush()可以将缓存中的数据全部读出,即刷新流。
练习:(需求:使用四种方式将C盘下一个MP3文件拷贝到D盘下)
import java.io.*;
public class CopyMp3 {
public static void main(String[] args) {
copy1();
copy2();
copy3();
copy4();
}
// 不使用缓冲区
public static void copy1() {
FileInputStream fi = null;
FileOutputStream fo = null;
try {
fi = new FileInputStream("c:\\fir.mp3");
fo = new FileOutputStream("d:\\fir1.mp3");
int num = 0;
while ((num = fi.read()) != -1) {
fo.write(num);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fi != null) {
try {
fi.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fo != null) {
try {
fo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
// 使用自定义缓冲区
public static void copy2() {
FileInputStream fi = null;
FileOutputStream fo = null;
try {
fi = new FileInputStream("c:\\fir.mp3");
fo = new FileOutputStream("d:\\fir2.mp3");
int num = 0;
byte[] b = new byte[1024 * 4];
while ((num = fi.read(b)) != -1) {
fo.write(b, 0, num);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fi != null) {
try {
fi.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fo != null) {
try {
fo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
// 使用刚好的缓冲区
public static void copy3() {
FileInputStream fi = null;
FileOutputStream fo = null;
try {
fi = new FileInputStream("c:\\fir.mp3");
fo = new FileOutputStream("d:\\fir3.mp3");
byte[] b = new byte[fi.available()];
fi.read(b);
fo.write(b);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fi != null) {
try {
fi.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fo != null) {
try {
fo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
// 使用缓冲流
public static void copy4() {
FileInputStream fi = null;
FileOutputStream fo = null;
BufferedInputStream bi = null;
BufferedOutputStream bo = null;
try {
fi = new FileInputStream("c:\\fir.mp3");
fo = new FileOutputStream("d:\\fir4.mp3");
bi = new BufferedInputStream(fi);
bo = new BufferedOutputStream(fo);
int num = 0;
while ((num = bi.read()) != -1) {
bo.write(num);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fi != null) {
try {
fi.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fo != null) {
try {
fo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liuxiaolei7676/archive/2010/04/12/5478391.aspx
发表评论
-
操作系统的目标和作用
2012-07-05 23:46 1326操作系统的目标 目前存在着多种类型的OS,不同类型的OS ... -
利用(ffmpeg)生成视频缩略图(java)
2012-07-01 01:11 0对于上传视频生成缩略图使用的是ffmpeg进行生成的。 自己在 ... -
对Java多线程技术中所有方法的详细解析
2012-06-06 11:32 784一、run()和start() 这两个 ... -
java乱码
2012-06-06 11:33 968自从接触Java和JSP以来, ... -
学习apache commons-io类库中的文件清除器
2011-07-06 23:26 1440学习apache commons-io 1.4类库中的File ... -
java 正则表达式 过滤html标签
2011-05-24 15:10 5352前段时间开发的时候要读取一篇文章的简介内容(也就是前200个字 ... -
转---Eclipse中web-inf和meta-inf文件夹的信息
2011-05-24 13:08 1131Eclipse中web-inf和meta-inf ... -
logback与Log4J的区别
2011-05-17 23:34 1432Logback和log4j是非常相似 ... -
性能优化
2011-04-14 16:10 1174(1)jdbc性能优化 jdbc程序的性能主要由两个因素决定 ... -
JAVA的Random类(转)
2011-04-12 00:21 908Random类中实现的随机算法是伪随机,也就是有规则的随机。在 ... -
非阻塞的Socket链接
2011-04-10 21:59 890import java.io.IOException; ... -
创建临时文件
2011-04-10 21:55 1091package net.java2000.io; ... -
面向对象设计的基本原则
2011-04-07 10:28 1143摘自:http://soft6.com/tech/6/6501 ... -
proxool
2011-04-02 15:01 856属性列表说明: fatal-sql- ... -
当前Java软件开发中几种认识误区
2011-04-01 10:12 876越来越多人开始使用Java ... -
Java中查看一个方法被调用的层次(Reflection、StackTrace)
2011-04-01 00:53 2032package test; public class Mai ... -
反序列化时恢复transient字段
2011-03-30 13:20 1212我们知道将字段设置为transient,可以避免该自动被序列化 ... -
用socket连接服务器直接发送接收邮件
2011-03-22 17:22 1301首页 新闻 论坛 问答 博客 招聘 更多 ▼ 专栏 &l ... -
利用JavaMail收/发Gmail邮件(SSL)
2011-03-22 17:21 2388Gmail目前已经启用了POP3和SMTP服务,具体情况请看 ... -
Java 反射与内省
2011-03-14 22:08 1073一、java反射机制 JAVA反 ...
相关推荐
使用51单片机C语言编写的示例程序,用于检测两个IO口的电平状态,并通过串口输出状态,同时控制两个继电器的动作。该程序会每1ms检测一次电平状态,并且在检测到状态变化后... // IO1的状态:0为关闭,1为打开 unsigne
在计算机系统中,IO(Input/Output)操作是与外部设备进行通信的关键环节。IO 端口是指CPU与外部设备交互的接口,用于发送和接收数据。在不同的硬件架构中,IO 端口的管理和访问方式有所不同,主要分为逻辑IO和物理...
6.1 回顾同时读键盘、鼠标的方法、 6.2 异步IO的原理 6.3 使用异步IO方式读鼠标和键盘 6.3 使用异步IO时,应用层的设置步骤 6.4 代码演示
注意: 该项目源代码提供了 QT-SOEM 配置从站到OP状态,并且对1个EtherCAT从站 IO模块进行操作,包括:IO输出控制,IO采集进行显示。 源代码 主要功能: 获取网卡信息,绑定网卡,配置EtherCAT网络,等待从站进入OP...
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non...
1. **跨平台支持**:PlatformIO可在Windows、macOS和Linux等操作系统上运行,提供一致的开发体验。 2. **多框架集成**:它不仅支持Arduino框架,还支持Micropython、CMSIS-DSP、mbed等多个嵌入式开发框架,使得...
1. **服务器端设置**:在Node.js项目中,导入`socket.io`模块,初始化服务器并监听特定端口,然后使用`io.on('connection', (socket) => {})`来处理新连接和事件。 2. **客户端连接**:在Java或Android应用中,导入...
几乎每一种外设都是通过读写设备上的寄存器来进行...CPU对外设IO端口物理地址的编址方式有两种:一种是I/O映射方式(I/O-mapped),另一种是内存映射方式(Memory-mapped)。而具体采用哪一种则取决于CPU的体系结构。
Socket.IO-客户端-Unity3D 产品特点 Unity3D的Socket.IO客户端,与Socket.IO v1.0及更高版本兼容。 (当前不支持Socket.IO V2。) Socket.io是开源实时应用程序框架。 Socket.io组页面: : 版本控制 Socket.IO-...
在RapidIO V3.0规范中,包含了几个核心组件,其中Part 1: Input/Output Logical Specification 3.0是规范的基础部分。在这一部分中,详细描述了RapidIO协议的基础逻辑,包括数据包的格式、传输协议、流控制机制、...
1. 驱动配置:首先,用户需要在Intouch中配置相应的IO驱动,为每个PLC设备选择正确的驱动程序。这通常涉及到设置通讯参数,如波特率、数据位、停止位和奇偶校验。 2. 连接建立:一旦驱动配置完成,Intouch会尝试建立...
1. **缓冲机制**:标准IO有自己的缓冲区,而文件IO通常没有,除非手动开启缓冲。 2. **性能**:标准IO因为有缓冲,可能在大量数据传输时表现更好;而文件IO通常更快,尤其是小块数据的读写。 3. **灵活性**:文件IO...
在电子设计中,IO按键扫描电路是一个常见的技术挑战,尤其是当资源有限且需要处理大量按键输入时。本文探讨了一种高效的方法,通过5个IO口驱动25个按键,大大节省了硬件资源。 首先,传统的按键扫描方法通常采用行...
1. **RapidIO基本原理**:介绍RapidIO协议的基本结构、数据传输机制和协议栈。 2. **RapidIO硬件设计**:讲解如何设计和实现RapidIO接口,包括物理层和数据链路层的实现。 3. **RapidIO软件支持**:阐述如何在操作...
1. 系统 IO 在读写文件时,每次操作都会执行相关系统调用,这样处理的好处是直接读写实际文件,坏处是频繁的系统调用会增加系统开销。标准 IO 可以看成是在文件 IO 的基础上封装了缓冲机制,先读写缓冲区,必要时再...
1. 编写C语言程序来控制单片机IO口的翻转。 2. 使用示波器来观察波形的变化。 3. 改变编译器、单片机类型和时钟频率等因素来观察IO口翻转速度和波形样式的变化。 实验结果: * AT89S52单片机:IO口翻转速度约为333...
platformio.platformio-ide-2.4.3
DDRIO(Double Data Rate Input/Output)模块是Xilinx FPGA设计中用于实现高速数据传输的关键组件。这个模块的独特之处在于其支持在时钟的上升沿和下降沿同时处理数据,从而实现了双倍数据速率(DDR),极大地提高了...
1. **图形渲染**:drawio.js的核心是图形渲染引擎,它使用SVG(可缩放矢量图形)作为基础,实现了图形的精确绘制和缩放。SVG的优势在于其矢量特性,无论放大多少倍都能保持清晰度,这对于绘图工具至关重要。 2. **...