关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。 于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可...
FileChannel类中有一方法transferFrom()可以方便完成文件的复制。详细介绍请查JDK文档。 据JDk文档上介绍说:“与从源通道读取并将内容写入此通道的简单循环语句相比,此方法可能高效得多。”程序中如有用到文件复制的时候,用此方法试吧。try { // 获得源文件的通道 FileChannel srcChannel = new FileInputStream("srcFilename").getChannel(); // 获得目的文件通道 FileChannel dstChannel = new FileOutputStream("dstFil...
我们可以在字节缓冲区(ByteBuffer)上创建 视图 以支持其它基本数据类型的缓冲区(Buffer)。比如,可以在ByteBuffer对象上创建一个字符型视图,在对待ByteBuffer时就好像在对待存放了字符的缓冲区一样。字符缓冲区直接支持字符串。同样地,视图的hasRemaining()方法返回的是字符数。 在处理一个已指定类型的字节缓冲区的视图时,要特别注意视图是创建在字节缓冲区的position到limit间的字节之上的。也就是说,视图的capacity大小是(limit – position),且视图的limit会根据指定类型的类型长度(如int为4字节大小)而减小,以...
写字节: ByteBuffer 的capacity属性决定了它能容纳多少字节,这个属性不能改变。使用绝对put(int index, byte b)方法,可以改变ByteBuffer中任意位置的字节,下标index取值范围为【0,capacity-1】 ByteBuffer 中的字节数据也能通过相对put()方法来设置,该方法会用到缓冲区 position 和 limit 属性,即,该方法会改变缓冲区position处的字节,并把position值增加1。相对put(byte b)方法不能设置下标超过limit的字节数据(不管limit有没有小于capacity)。所以下面...
下面的例子演示了如何用 ByteBuffer(字节缓冲区)来存储字符。有时候程序可能会希望在将字符串存至文件时不用来回进行字符到字节间的(显式)转换。下面的例子首先在 ByteBuffer 上创建一个字符视图(即 CharBuffer ,字节缓冲区),CharBuffer中有用来提供读、写字符串的方法。 这个例子并没有将字符和字节进行转换。对于如何在字符和字节之间进行转换,后文将给出例子。// 获得一个ByteBuffer对象ByteBuffer buf = ByteBuffer.allocate(100);// 创建一个character ByteBufferCharBu...
文件锁定概述文件锁定初看起来可能让人迷惑。它 似乎 指的是防止程序或者用户访问特定文件。事实上,文件锁就像常规的 Java 对象锁 ― 它们是 劝告式的(advisory) 锁。它们不阻止任何形式的数据访问,相反,它们通过锁的共享和获取赖允许系统的不同部分相互协调。您可以锁定整个文件或者文件的一部分。如果您获取一个排它锁,那么其他人就不能获得同一个文件或者文件的一部分上的锁。如果您获得一个共享锁,那么其他人可以获得同一个文件或者文件一部分上的共享锁,但是不能获得排它锁。文件锁定并不总是出于保护数据的目的。例如,您可能临时锁定一个文件以保证特定的写操作成为原子的,而不会有其他程序的干扰。大...
关于内存映射文件 I/O 内存映射文件I/O 是一种读和写文件数据的方法,它可以比常规的基于流或者基于通道的 I/O 快得多。内存映射文件 I/O 是通过使文件中的数据神奇般地出现为内存数组的内容来完成的。这初听起来似乎不过就是将整个文件读到内存中,但是事实上并不是这样。一般来说,只有文件中实际读取或者写入的部分才会送入(或者 映射 )到内存中。内存映射并不真的神奇或者多么不寻常。现代操作系统一般根据需要将文件的部分映射为内存的部分,从而实现文件系统。Java 内存映射机制不过是在底层操作系统中可以采用这种机制时,提供了对该机制的访问。尽管创建内存映射文件相当简单,但是向它写入可能...
NIO , New IO,没有学过,好奇,就从外网上翻译了一些代码过来,希望以会用上吧。 一个 ByteBuffer 是一个有固定容量的存储了字节数值的缓冲区。下面的代码展示了创建ByteBuffer的一些方法。//使用字节数组创建 ByteBuffer byte[] bytes = new byte[10];ByteBuffer buf = ByteBuffer.wrap(bytes);// 创建一个容量为10个字节的非直接缓冲区// ByteBuffer的底层含有一个字节数组buf = ByteBuffer.allocate(10);//创建一个容量为10个字节的直接(内存映...
一个文件路径可能包含不必要的前缀,如 "." (表示当前目录)或者 ".." (表示当前目录的父目录),类File中的 getCanonicalFile()可以把文件路径规范为一个统一的形式以作比较。 假设当前工作目录在'c:\arron\',比较两个File实例是否指向同一个文件的代码如下 :File file1 = new File("./filename");File file2 = new File("filename");// 两个文件路径名不相等boolean b = file1.equals(file2); // false// 获得文件路径的...