`
lighter
  • 浏览: 500202 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

读源码之旅 java.io包

阅读更多
对于下图,研究了一下常用的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
分享到:
评论

相关推荐

    Java jdk源码

    Java JDK源码是Java开发人员深入...总的来说,研究Java JDK源码是一次深入学习之旅,它可以帮助开发者从底层理解Java的工作方式,提升编程技艺,解决复杂问题,并且更好地利用Java的特性来设计高效、可靠的软件系统。

    rt.jar源码

    总结,rt.jar源码的探索是一次深入Java世界的学习之旅,它将帮助开发者从底层理解Java,提高编程技能,为解决复杂问题提供更强大的武器。只有深入掌握rt.jar的内在逻辑,才能更好地驾驭Java这一强大的编程语言。

    java jdk 部分源码

    Java JDK 源码是Java开发者的宝贵资源,它揭示了Java平台的核心工作原理。这里主要探讨的是基于JDK 1.8.0_...尽管源码阅读可能有一定的难度,但对于提升编程技能和理解Java平台的工作方式,无疑是一次宝贵的探索之旅。

    jdk1.8source源码

    Java Development Kit (JDK) 1.8 是Java编程语言的一个关键版本,它引入了许多重要的特性和改进。...对于希望深入理解Java并成为更好的开发者的程序员来说,JDK 1.8源码的探索是一次不可或缺的学习之旅。

    JDK1.7 src.zip源码

    《深入解析JDK1.7源码:开启Java开发者的技术之旅》 在Java开发领域,对JDK源码的理解和掌握是提升技术水平的关键步骤。JDK1.7的src.zip源码压缩包为开发者提供了宝贵的参考资料,使得我们可以深入了解Java语言的...

    java-jdk源码学习

    Java JDK源码学习是深入理解Java编程语言的关键步骤,它能帮助开发者洞悉语言底层的工作原理,提升编程技能和优化代码的能力。...这是一场深度技术探索之旅,也是成为一名杰出Java开发者的必经之路。

    java的学习步骤

    学习 Java 语言是一个系统的过程,涉及多个阶段,每一步都需要专注和理解。以下是一个详细的 Java ...遵循上述步骤,逐步深入,Java 学习之旅将更加高效且充实。不断实践和积累经验,你将成为一名熟练的 Java 开发者。

    大数据学习之旅——NIO源码

    在大数据学习之旅中,理解NIO的这些核心概念是基础。首先,我们需要了解`java.nio`包中的各类通道类,如FileChannel、SocketChannel和ServerSocketChannel等,它们分别对应于文件操作、网络连接的客户端和服务端。...

    文档源码_java_

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而著名。在“文档源码_java_”这个资源中,我们很显然...无论你是Java新手还是有经验的开发者,这份资料都能为你的Java编程之旅增添新的动力。

    java毕设之旅游网站设计

    【标题】"java毕设之旅游网站设计"涵盖了多个IT领域的关键知识点,主要涉及Java编程语言、前端开发、后端架构、数据库管理和毕业设计实践。这个项目是一个完整的餐饮旅游类网站,适合用作大学生的毕业设计或课程设计...

    绝对经典的JAVA源代码。

    Java编程语言作为世界上最受欢迎的编程语言之一,以其跨平台、面向对象的特点深受广大开发者喜爱。这个压缩包文件的标题——"绝对经典的JAVA源代码",暗示了其中...所以,不要犹豫,赶紧下载并开始你的Java学习之旅吧!

    corejava(source)

    《深入解析CoreJava源码》 CoreJava是Java编程领域中的经典...通过研读CoreJava的源码,无论是对Java初学者还是经验丰富的开发者,都将是一次宝贵的提升之旅,它能帮助我们从理论走向实践,真正掌握Java编程的精髓。

    Java相关技术的源码学习心得

    在深入探讨Java源码学习心得之前,我们先要理解Java作为一种多用途、面向对象的编程语言,其广泛应用于企业级应用、移动...在实践过程中,不断积累经验,结合文档和社区资源,将使Java源码学习之旅更加充实和有意义。

    Java学习资料&项目源码&教程资源

    ### Java学习资料&项目源码&教程资源概览 #### 一、Java学习资料 Java作为一门广泛应用的编程语言,在全球范围内拥有庞大的开发者社区。...希望这些资源能够为您的Java编程之旅提供有价值的帮助。

    geoda源码+安装软件+操作手册.zip

    《Geoda:开源地理数据分析平台全面解析》 Geoda,全称为Geographic Data Analysis,是一款强大的开源地理数据分析软件,由亚利桑那州立大学地理信息系统科学与...希望这篇文章能为你的GIS学习之旅提供有力的支持。

    java霸王的大陆源码-overlord_java:Java版本的霸主C++库

    《Java霸王的大陆源码——探索Overlord_java的系统开源之旅》 在IT的世界里,开源精神犹如一盏明灯,照亮了无数开发者前行的道路。当我们谈论“Java霸王的大陆”时,我们实际上是在探讨一个名为Overlord_java的项目...

    用java做一个自己的音乐播放器

    Java的`java.io`包提供了文件读写的基本功能,开发者需要学会如何遍历目录、打开文件以及获取文件信息。 6. **播放列表管理**:用户可能希望创建和管理多个播放列表。这需要实现数据结构(如链表或数组)来存储歌曲...

    java视频教程_黑马Java零基础辅导班[第二期]09天课件源码

    《Java编程之旅:黑马程序员零基础辅导班课程详解》 在IT行业中,Java语言以其强大的跨平台能力和丰富的库支持,始终占据着重要的地位。对于初学者来说,掌握Java开发技术是进入这个领域的关键一步。本教程针对零...

    nbplugin2:一个NetBeans插件,可使用来自foojay.io的OpenJDK Discovery Service下载并安装任何OpenJDK构建。

    《nbplugin2:开启NetBeans与OpenJDK的无缝整合之旅》 在Java开发的世界里,NetBeans作为一款强大的开源集成开发环境(IDE),一直深受程序员喜爱。它提供了丰富的功能,包括代码编辑、调试、项目管理等,为开发者...

    学通Java的24堂课

    在“学通Java的24堂课”这个学习资源中,你将踏上一条全面而深入的Java编程之旅。这门课程由清华大学出版社出版,旨在帮助初学者和有经验的开发者进一步提升Java技能。课程涵盖了从基础到高级的多个主题,通过丰富的...

Global site tag (gtag.js) - Google Analytics