followed by a stream of bytes, the following main introduction character stream, character stream and byte stream difference and file copy copy. In the program, a character equals two bytes, and a Chinese character occupies two bytes (General Limited interview will ask: A char can save a Chinese character, the answer is, of course, a char and a Chinese character accounted for two bytes), the general use of byte stream if defined as odd number of length is, then stored Chinese characters will have garbled problem, Java provides two classes of reader and writer that specialize in manipulating character streams.
1 Writer character output stream
This class is an abstract class that needs to be implemented by its subclasses. Implements the Closeable,flushable, appendable three interfaces.
The following method:
Writer append (char c) adds the enactment character to the writer
void Close () Close Artesian
void Flush () refreshes the buffer of the stream change
void Write (char[] cbuf) writes a character array
void Write (char[] cbuf, int off, int len) writes a portion of the character array.
void write (int c) writes a single character
void write (String str) writes a string
void Write (String str, int off, int len) 写入字符串的某一部分。
可以看出 Writer是对Char[] 和 String字符串操作,而OutputStream是对byte[]数组操作。Writer还可以向流中追加内容。
下面是Writer的实例,使用其子类FileWriter实例化:
Package Andy.io.test;import Java.io.file;import Java.io.filewriter;import java.io.ioexception;import java.io.Writer ;/** * @author zhang,tianyou * version:2014-11-19 pm 4:59:24 * * */public class Writertest {/** * @ param args * @throws ioexception */public static void Main (string[] args) throws IOException {//TODO auto-generated m Ethod stubfile file = new file ("D:" + File.separator + "test.txt"); Writer writer = Null;writer = new FileWriter (file, true);//The second argument is to append the content to the file string str = "Hello Andy!"; /Method One Writer.write (Str.tochararray ());//Method two//writer.write (str); Writer.close ();}}
2 Reader character input stream
Reader也是抽象类,其实现了
Closeable,readable interface.
The main methods are as follows:
void Close () close character input stream
int read () reads a single character.
int read (char[] cbuf) reads the characters into the array.
the abstract int read (char[] cbuf, int off, int len) reads the characters into a portion of the array.
int read (Charbuffer target) attempted to read a character into the specified character buffer.
The specific implementation is as follows:
Package Andy.io.test;import Java.io.file;import Java.io.filereader;import java.io.ioexception;import java.io.Reader ;/** * @author zhang,tianyou * version:2014-11-19 pm 5:11:02 * * */public class Readertest {/** * @ param args * @throws ioexception */public static void Main (string[] args) throws IOException {//TODO auto-generated m Ethod stubfile file = new file ("D:" + File.separator + "test.txt"); Reader reader = Null;reader = new FileReader (file), char[] C = new char[(int) file.length ()];//method one//reader.read (c);//Method two in T temp = 0;int len = 0;while ((temp = Reader.read ())! =-1) {C[len] = (char) Temp;++len;} Reader.close (); System.out.println ("Content:" + new String (c));}}
3 The difference between a byte stream and a character stream
The use of byte stream and character stream is very similar, the byte stream is not used in the buffer (memory), it is the direct operation of the file itself, and the character stream is used in buffer to manipulate the file through buffer.
The character stream must use Clos () or flush () to output the stream in the buffer. and the byte stream does not turn off and can output normally.
The principle is as follows:
BYTE stream: Program------------------byte stream----------------------file
Character Stream: Program-------------------character stream----------------------cache-----------------------------File
Well, what's the best thing to do with it? : All files are carried out in bytes on the hard drive or in the process of transmission, including pictures, etc. are stored in bytes, and characters are only formed in memory, so the byte stream is generally used.
3 Implementing file Copy from A to B
Executing java FileCopy source file target file in cmd
Implementation ideas: 1 read the contents of the source file into memory and write it to the target file once.
2 does not read the contents of the source file, but uses the way of reading and writing the side.
We must adopt the second, if the file is read into memory at once, it will inevitably lead to memory overflow, affecting performance.
The specific implementation is as follows:
Package Andy.io.test;import Java.io.file;import Java.io.fileinputstream;import java.io.FileNotFoundException; Import Java.io.fileoutputstream;import java.io.ioexception;import Java.io.inputstream;import Java.io.OutputStream ;/** * @author zhang,tianyou version:2014-11-19 pm 5:31:21 * */public class FileCopy {/** * @param args */public static void Main (string[] args) {//TODO auto-generated method stubif (Args.length! = 2) {//Determine if the file parameter is 2system.out.println ("File parameter is not That's right. "); System.out.println ("For example: Java FileCopy source file path destination file path"); System.exit (1);} File Srcfile = new file (Args[0]); File objfile = new file (Args[1]), if (!srcfile.exists ()) {System.out.println ("source file does not exist!) "); System.exit (1);} InputStream InputStream = Null;outputstream OutputStream = null;try {inputstream = new FileInputStream (srcfile);} catch (F Ilenotfoundexception e) {//TODO auto-generated catch Blocke.printstacktrace ();} try {outputstream = new FileOutputStream (objfile),} catch (FileNotFoundException e) {//TODO auto-generated catch blocKe.printstacktrace ();} if (InputStream = null && outputstream! = null) {try {byte[] buff = new byte[1024];//read 1024 int len = 0;while (len = inputstream.read (buff))! =-1) {outputstream.write (buff, 0, Len);} Inputstream.close (); Outputstream.close ();} catch (IOException e) {e.printstacktrace ();}}}}
Java IO byte stream and character stream-reader and writer and implement file copy copy