Welcome![Sign In][Sign Up]
Location:
Search - java FileInputStream

Search list

[DocumentsjavaNIO

Description: 一系列缓冲区类支撑起了 Java 2 平台标准版的新 I/O(NIO)包。这些类的数据容器形成了其它 NIO 操作(如套接字通道上的非阻塞读取)的基础。在本月的 Merlin 的魔力中,常驻 Java 编程专家 John Zukowski 展示了如何操作那些数据缓冲区来执行如读/写原语这样的任务以及如何使用内存映射文件。在以后的文章里,他将把这里所提到的概念扩展到套接字通道的使用。 Java 2 平台标准版(Java 2 Platform Standard Edition,J2SE)1.4 对 Java 平台的 I/O 处理能力做了大量更改。它不仅用流到流的链接方式继续支持以前 J2SE 发行版的基于流的 I/O 操作,而且 Merlin 还添加了新的功能 — 称之为新 I/O 类(NIO),现在这些类位于 java.nio 包中。 I/O 执行输入和输出操作,将数据从文件或系统控制台等传送至或传送出应用程序。(有关 Java I/O 的其它信息,请参阅 参考资料)。 缓冲区基础 抽象的 Buffer 类是 java.nio 包支持缓冲区的基础。 Buffer的工作方式就象内存中用于读写基本数据类型的 RandomAccessFile 。象 RandomAccessFile一样,使用 Buffer ,所执行的下一个操作(读/写)在当前某个位置发生。执行这两个操作中的任一个都会改变那个位置,所以在写操作之后进行读操作不会读到刚才所写的内容,而会读到刚才所写内容之后的数据。 Buffer 提供了四个指示方法,用于访问线性结构(从最高值到最低值): "capacity() :表明缓冲区的大小 "limit() :告诉您到目前为止已经往缓冲区填了多少字节,或者让您用 :limit(int newLimit) 来改变这个限制 "position() :告诉您当前的位置,以执行下一个读/写操作 "mark() :为了稍后用 reset() 进行重新设置而记住某个位置 缓冲区的基本操作是 get() 和 put() ;然而,这些方法在子类中都是针对每种数据类型的特定方法。为了说明这一情况,让我们研究一个简单示例,该示例演示了从同一个缓冲区读和写一个字符。在清单 1 中, flip() 方法交换限制和位置,然后将位置置为 0,并废弃标记,让您读刚才所写的数据: 清单 1. 读/写示例 import java.nio.*; ... CharBuffer buff = ...; buff.put('A'); buff.flip(); char c = buff.get(); System.out.println("An A: " + c); 现在让我们研究一些具体的 Buffer 子类。 回页首 缓冲区类型 Merlin 具有 7 种特定的 Buffer 类型,每种类型对应着一个基本数据类型(不包括 boolean): "ByteBuffer "CharBuffer "DoubleBuffer "FloatBuffer "IntBuffer "LongBuffer "ShortBuffer 在本文后面,我将讨论第 8 种类型 MappedByteBuffer ,它用于内存映射文件。如果您必须使用的类型不是这些基本类型,则可以先从 ByteBuffer 获得字节类型,然后将其转换成 Object 或其它任何类型。 正如前面所提到的,每个缓冲区包含 get() 和 put() 方法,它们可以提供类型安全的版本。通常,需要重载这些 get() 和 put() 方法。例如,有了 CharBuffer ,可以用 get() 获得下一个字符,用 get(int index) 获得某个特定位置的字符,或者用 get(char[] destination) 获得一串字符。静态方法也可以创建缓冲区,因为不存在构造函数。那么,仍以 CharBuffer为例,用 CharBuffer.wrap(aString) 可以将 String对象转换成 CharBuffer 。为了演示,清单 2 接受第一个命令行参数,将它转换成 CharBuffer ,并显示参数中的每个字符: 清单 2. CharBuffer 演示 import java.nio.*; public class ReadBuff { public static void main(String args[]) { if (args.length != 0) { CharBuffer buff = CharBuffer.wrap(args[0]); for (int i=0, n=buff.length(); i<n; i++) { System.out.println(i + " : " + buff.get()); } } } } 请注意,这里我使用了 get() ,而没有使用 get(index) 。我这样做的原因是,在每次执行 get() 操作之后,位置都会移动,所以不需要手工来声明要检索的位置。 回页首 直接 vs. 间接 既然已经了解了典型的缓冲区,那么让我们研究直接缓冲区与间接缓冲区之间的差别。在创建缓冲区时,可以要求创建直接缓冲区,创建直接缓冲区的成本要比创建间接缓冲区高,但这可以使运行时环境直接在该缓冲区上进行较快的本机 I/O 操作。因为创建直接缓冲区所增加的成本,所以直接缓冲区只用于长生存期的缓冲区,而不用于短生存期、一次性且用完就丢弃的缓冲区。而且,只能在 ByteBuffer 这个级别上创建直接缓冲区,如果希望使用其它类型,则必须将 Buffer 转换成更具体的类型。为了演示,清单 3 中代码的行为与清单 2 的行为一样,但清单 3 使用直接缓冲区: 清单 3. 列出网络接口 import java.nio.*; public class ReadDirectBuff { public static void main(String args[]) { if (args.length != 0) { String arg = args[0]; int size = arg.length(); ByteBuffer byteBuffer = ByteBuffer.allocateDirect(size*2); CharBuffer buff = byteBuffer.asCharBuffer(); buff.put(arg); buff.rewind(); for (int i=0, n=buff.length(); i<n; i++) { System.out.println(i + " : " + buff.get()); } } } } 在上面的代码中,请注意,不能只是将 String 包装在直接 ByteBuffer中。必须首先创建一个缓冲区,先填充它,然后将位置倒回起始点,这样才能从头读。还要记住,字符长度是字节长度的两倍,因此示例中会有 size*2 。 回页首 内存映射文件 第 8 种 Buffer 类型 MappedByteBuffer 只是一种特殊的 ByteBuffer 。 MappedByteBuffer 将文件所在区域直接映射到内存。通常,该区域包含整个文件,但也可以只映射部分文件。所以,必须指定要映射文件的哪部分。而且,与其它 Buffer 对象一样,这里没有构造函数;必须让 java.nio.channels.FileChannel的 map() 方法来获取 MappedByteBuffer 。此外,无需过多涉及通道就可以用 getChannel() 方法从 FileInputStream 或 FileOutputStream获取 FileChannel 。通过从命令行传入文件名来读取文本文件的内容,清单 4 显示了 MappedByteBuffer : 清单 4. 读取内存映射文本文件 import java.io.*; import java.nio.*; import java.nio.channels.*; import java.nio.charset.*; public class ReadFileBuff { public static void main(String args[]) throws IOException { if (args.length != 0) { String filename = args[0]; FileInputStream fis = new FileInputStream(filename); FileChannel channel = fis.getChannel(); int length = (int)channel.size(); MappedByteBuffer byteBuffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, length); Charset charset = Charset.forName("ISO-8859-1"); CharsetDecoder decoder = charset.newDecoder(); CharBuffer charBuffer = decoder.decode(byteBuffer); for (int i=0, n=charBuffer.length(); i<n; i++) { System.out.print(charBuffer.get()); } } } }
Platform: | Size: 5876 | Author: 635868631@qq.com | Hits:

[Button controlJfilechooser

Description: JButton button JTextArea text JTextPane textpane FileInputStream readfile JScrollPane scroll Container con JFileChooser chooser=new JFileChooser()
Platform: | Size: 1024 | Author: adruomais | Hits:

[Internet-NetworkClient

Description: 首先创建FileInputStream的对象, 基于图片文件,创建一个输入流,通过FileInputStream获取图片文件,通过Scoket类创建实例对象获取上传的服务器Ip地址,然后通过Socket类的getOutputStream()方法上传图片,在通过while()循环进行判断,如果上传成功则输出客户端发送完成-First of all, create a FileInputStream object, based on the image file, create a input stream FileInputStream access through the picture files, by category Scoket access From the object to create instances of server Ip address, and then through the Socket class getOutputStream () method upload a picture, in the adoption of while () to determine the cycle, if the upload is successful the client to send the output to complete
Platform: | Size: 1024 | Author: sport | Hits:

[JSP/Javaday13

Description: 一些java常遇到的联系题,输入 public class ArraySortedSet implements SortedSet-import java.io.FileInputStream import java.util.Properties
Platform: | Size: 6144 | Author: 刘凯 | Hits:

[JSP/JavaIOModel

Description: java的IO流的运用源码,包括FileInputStream、FileOutputStream、PipedInputStream、PipedOutputStream等运用-application of IO
Platform: | Size: 26624 | Author: wangzhenghua | Hits:

[JSP/JavaIOOperate

Description: MyEclipse 下的java project 工程,功能是:使用FileInputStream 和FileOutputStream 进行文件的读取,保存操作。(用java代码实现文件的复制保存功能)本程序简单易懂,入门IO必看。-MyEclipse java project engineering functions: use FileInputStream and FileOutputStream file read and save operations. Copy of the file (using java code save function) The program is simple and easy to understand, and the entry-IO must see.
Platform: | Size: 3072 | Author: Robin | Hits:

[JSP/Javajava

Description: 用DataInputStream和FileInputStream流类,编制信用管理并显示顾客的账户信息,包括支出平衡、有盈余和有亏损。-Using DataInputStream and FileInputStream flow classes, preparation of credit management and customer account information, including balance of payments surplus and a loss.
Platform: | Size: 6144 | Author: 王月 | Hits:

[JSP/JavaQQ

Description: 本程序是基于TCP/IP协议的网络通信程序,运用了Java的流、文件、多线程等编程技术。套接字对象在网络编程中扮演着重要的角色,该程序就是一个基于套接字技术编写的简单聊天工具。聊天功能所使用的输入输出流分别是BufferedReader和PrintWriter,服务器为客户端启动一个线程,在该线程中通过套接字和客户交流信息。当向服务器发送一条聊天信息:“Hello”时,服务器要向这个线程中的输出流写入信息:“Hello”,那么客户端套接字的输入流就读取到了这条消息。文件传输分为文件发送和文件接收两部分,当服务器端要向客户端发送文件时,先调用字节输入流FileInputStream从本机读取想要发送的文件,再将信息通过字节输出流BufferedOutputStream发送到客户端,这样客户端的字节输入流BufferedInputStream就读取到了相应信息,客户端再通过字节输出流FileOutputStream将信息以文件形式存入本机。-This program is based on network communication program TCP/IP protocol, the use of Java streams, files, and other multi-threaded programming techniques. Socket object plays an important role in network programming, the program is written in a simple socket-based chat tool technology. Input and output streams chat are used BufferedReader and PrintWriter, the server for the client to start a thread in the thread through the socket and customers to exchange information. When sending a chat message to the server: " Hello" , the server would like this thread output stream to write information: " Hello" , then the client socket input stream is read to this message. File transfer files sent and received document is divided into two parts, when the client would like the server to send the file, byte input stream FileInputStream first call to read the file you want to send from the machine, then the information output by the byte stream BufferedOutputStream sent to the client, s
Platform: | Size: 7168 | Author: 佟文浩 | Hits:

[Compress-Decompress algrithmswenjianjieyaheduxie

Description: java实现文件读写和解压 private static void testInput() { // D盘下有个Welcome.java文件,现在按字节读入: int a = 0 // int counter=0 FileInputStream f11 // 输入流 try {-import java.io.BufferedReader import java.io.BufferedWriter import java.io.File import java.io.FileInputStream import java.io.FileNotFoundException import java.io.FileOutputStream import java.io.FileReader import java.io.FileWriter import java.io.IOException import java.io.InputStream import java.util.Enumeration import java.util.Random import java.util.zip.ZipEntry import java.util.zip.ZipException import java.util.zip.ZipFile
Platform: | Size: 2048 | Author: 皮卡丘 | Hits:

CodeBus www.codebus.net