对于下图,研究了一下常用的InputStream,ByteArrayInputStream,BufferedInputStream,FileIputStream,ObjectInputStream,DataInputStream 以及相对应的OutStream类。
看完还是有一些收获的:
1、对其整体结构更清晰了一些,基本上在什么场合想用哪一个流心里都比较有数了。
2、明白了为什么一些类在write后,还要flush一下。举一个例子,看一下BufferedOutputStream里面的几个方法就明白
public synchronized void write(int b) throws IOException {
if (count >= buf.length) {
flushBuffer();
}
buf[count++] = (byte)b; //这里的write作用是把数组放入buf数组,作当缓冲
}
public synchronized void flush() throws IOException {
flushBuffer(); //写入数据
out.flush(); //调用包装的类的flush方法
}
private void flushBuffer() throws IOException {
if (count > 0) {
out.write(buf, 0, count);
count = 0;
}
}
3、有一些Stream关闭不关闭都是一样的,例如像 ByteArrayInputStream
4、ByteArrayInputStream类有如下方法:
public synchronized int read() {
return (pos < count) ? (buf[pos++] & 0xff) : -1;
}
注意这里的 0xff,搜索一些资料
引用
0xFF is hexadecimal, you can Wikipedia that part.
FF is a representation of
00000000 00000000 00000000 11111111
(a 32-bit integer)
& means bit-wise "and", and so when you use it on two ints, each pair of bits from those two ints is and-ed and the result is placed in the resultant int:
Example (showing 16 bits only)
0101 1100 1010 1100
&0000 0000 1111 1111
-----------------
=0000 0000 1010 1100
引用
Bytes are signed in Java. In binary 0x00 is 0, 0x01 is 1 and so on but all 1s (ie 0xFF) is -1, oxFE is -2 and so on. See Two's complement, which is the binary encoding mechanism used.
http://en.wikipedia.org/wiki/Two's_complement
5、比较复杂的类:ObjectOutputStream,要花多一些时间去看
6、研究RandomAccessFile类,可以复习一下按位运算符。
运算符 符号
按位与 &
按位左移 <<
按位取反 ~
按位或 |
按位右移 >>
按位异或 ^
无符号右移 >>>
- 大小: 90.8 KB
分享到:
相关推荐
org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z Hadoop源码_NativeIO.java
NULL 博文链接:https://yizhilong28.iteye.com/blog/1154098
Java实现的点对点短消息发送协议(smpp)开发包源码.rar Java实现的视频播放程序源码.rar Java实现移动的遮照效果.rar JAVA实现超级玛丽.zip Java实现跟踪鼠标运行坐标的源码.rar Java手机与计算机互发彩信源码.rar ...
java.util包源码,pdf版,方便打印
card.io for eclipse 根据最新版card.io编译,绝对好用
java的jdk源码解析,主要解析io、nio相关的类组织结构图
基于mxgraph.js的基础之上二次开发的,目前最强大的绘图类工具里面排名前一、二名的 draw.io 生成组态编辑器.
socket.io编写的聊天室,群聊,单聊,创建聊天室,对于代码变量的定义,并没有发心思取,只是安当时想的来,页面不是很友好,希望能提供给用socket.io的朋友一点点的经验
来源于网上的博文,我对源码做了一些增强,并把需要的node.js、socket.io、jQuery、服务端和客户端源码,全部打在一起(node.js的npm需要在线安装,聊天室样例也有引用到互联网上的js文件,我把它们全部都本地化了,...
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import ...
draw.io源码框图
java.io.InputStream java.io.OutputStream java.io.Reader java.io.Writer 4. FileInputStream和FileOutputStream是什么? 这是在拷贝文件操作的时候,经常用的两个类。在处理小文件的时候,它们的性能还不错,在大...
java源码,base64转码解码,包括源码和jar包,图片或文件与base64互相转换。
1、 导入dwr.jar包 2、 在web.xml中配置dwr,如下: <!-- 配置DWR --> <servlet-name>dwr-invoker org.directwebremoting.servlet.DwrServlet <init-param> <param-name>debug</param-name> ...
java操纵excel的jar包(jxl.jar包 源码)java操纵excel的jar包(jxl.jar包 源码)java操纵excel的jar包(jxl.jar包 源码)java操纵excel的jar包(jxl.jar包 源码)java操纵excel的jar包(jxl.jar包 源码)java操纵...
我在进行MapReduce本地测试的时候,遇见下面的报错: ...解决方法:①第一步:在项目工程中加入NativelO.java,注意包名必须与源码中一致 ②第二步:将access方法的返回值改为true,不让他去调用access0() 类似
Java源码包100个设计实例, 大量 实例,可以作为你的学习设计参考。 实例如下: Applet钢琴模拟程序java源码 Calendar万年历 copass源代码.rar DataBuffer在Java中使用ADO.NET.rar ...Java软件度量源码.ra
解决本地调试Hadoop 异常。 org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.sql.Time; import java.util.logging.Level; import java.util.logging....