Java_ioシステムのDataInputStream、DataOutputStreamの概要、ソースコードおよび例-08


Java_ioシステムのDataInputStream、DataOutputStreamの概要、ソースコードおよび例-08
       それとも出力ストリームから、このストリームは支払いがあってこそ報われるのか、PipedInputStream、PipedOutputStreamのように1対のオブジェクトを結合して使用しなければならないとは思わないが、DataOutputStreamが宛先にデータを書き込む前に、DataInputStreamを使用してデータをプログラムに読み込み、javaベースタイプに変換する必要がある.
一:DataOutputStream
1、       クラス機能の概要:
       データバイト出力ストリーム、DataOutputStreamを紹介する前に1つのクラスFilterOutputStream、1つのインタフェースDataOutput、FilterOutputStreamを紹介する:前述したように、すべての装飾バイト出力ストリームの装飾クラスの親であり、装飾を定義する基準であり、装飾の実現をユーザーに透明化することを意味する.DataOutput:データ出力インタフェース、Javaの様々な元のデータをバイナリバイトストリームに変換する方法を定義し、DataOutputStreamはDataOutput実装クラスとして、DataOutのすべての方法を書き換えた.ここでは、Javaの基礎データ型をデータバイト出力ストリームに書き込み、記憶媒体に保存する、その後、DataInputStreamで記憶媒体からプログラムに読み込んでjavaベースタイプに復元できます.ここでは、DataOutputStream、DataOut、FilterOutputStreamの3つのクラスの関係について、このような設計では装飾器モードとブリッジモードを使用し、クラスの爆発的な増加を回避しています.
 
2、       DataOutputStream APIの概要:
        A:キーフィールド
	protected int wrriten;		                
	
	private byte[] bytearr;		      writeUTF(String str)   str                    

        B:構築方法
	DataOutputStream(OutputStream out);		              dos

        C:一般的な方法
	void flush();	 dos      flush     
	
	int size();		  dos        
	
	synchronized void write(int b);		            dos 
	
	synchronized void write(byte b[], int off, int len);	              dos 
	
	writeBoolean(boolean v);	   boolean    dos 
	
	writeByte(int v);	       dos 
	
	writeShort(int v);	   short     dos 
	
	void writeChar(int v);	          dos 
	
	void writeInt(int v);	         dos 
	
	void writeLong(long v);	   long     dos 
	
	void writeFloat(float v);	   float     dos 
	
	void writeDouble(double v);	   double     dos 
	
	void writeBytes(String s);	                 dos 
	
	void writeChars(String s);	                 dos 
	
	void writeUTF(String str);	            dos 

3、       ソース分析:
package com.chy.io.original.code;

import java.io.IOException;
import java.io.UTFDataFormatException;

/**
 * DataOutput    : java         、             。
 *           String     UTF-8                    。 
 */
public class DataOutputStream extends FilterOutputStream implements DataOutput {
    /**
     *                  、         、  size()    。
     */
    protected int written;

    /**
     * writeUTF     。
     */
    private byte[] bytearr = null; 

    /**
     *   OutputStream       DataOutputStream dos 、 dos  FilterOutputStream   、DataOut  。
     *        :written = 0 。
     */
    public DataOutputStream(OutputStream out) {
    	super(out);
    }

    /**
     *   written  、  int          2 31  -1。
     */
    private void incCount(int value) {
        int temp = written + value;
        if (temp < 0) {
            temp = Integer.MAX_VALUE;
        }
        written = temp;
    }

    /**
     *      OutputStream(    out) out.write(b)   int b  out       。
     *   written + 1。
     */
    public synchronized void write(int b) throws IOException {
    	out.write(b);
        incCount(1);
    }

    /**
     *   out.write(byte[] b, int off, int len) b      off   len    out 。
     *   :         synchronized、                      s 、
     *             out        、                       。
     *   、    written + len。
     */
    public synchronized void write(byte b[], int off, int len)
	throws IOException
    {
		out.write(b, off, len);
		incCount(len);
    }

    /**
     *  out    flush out        。
     */
    public void flush() throws IOException {
    	out.flush();
    }

    /**
     *   boolean     out 、written + 1。
     */
    public final void writeBoolean(boolean v) throws IOException {
    	out.write(v ? 1 : 0);
    	incCount(1);
    }

    /**
     *        out 、written + 1。
     */
    public final void writeByte(int v) throws IOException {
    	out.write(v);
        incCount(1);
    }

    /**
     *    short  out、written + 2。
     */
    public final void writeShort(int v) throws IOException {
        out.write((v >>> 8) & 0xFF);
        out.write((v >>> 0) & 0xFF);
        incCount(2);
    }

    /**
     *    char  out、written + 2。
     */
    public final void writeChar(int v) throws IOException {
        out.write((v >>> 8) & 0xFF);
        out.write((v >>> 0) & 0xFF);
        incCount(2);
    }

    /**
     *    int  out、written + 4。
     */
    public final void writeInt(int v) throws IOException {
        out.write((v >>> 24) & 0xFF);
        out.write((v >>> 16) & 0xFF);
        out.write((v >>>  8) & 0xFF);
        out.write((v >>>  0) & 0xFF);
        incCount(4);
    }

    private byte writeBuffer[] = new byte[8];

    /**
     *    long  out、written + 8。
     */
    public final void writeLong(long v) throws IOException {
        writeBuffer[0] = (byte)(v >>> 56);
        writeBuffer[1] = (byte)(v >>> 48);
        writeBuffer[2] = (byte)(v >>> 40);
        writeBuffer[3] = (byte)(v >>> 32);
        writeBuffer[4] = (byte)(v >>> 24);
        writeBuffer[5] = (byte)(v >>> 16);
        writeBuffer[6] = (byte)(v >>>  8);
        writeBuffer[7] = (byte)(v >>>  0);
        out.write(writeBuffer, 0, 8);
        incCount(8);
    }

    /**
     *    float  out。
     */
    public final void writeFloat(float v) throws IOException {
    	writeInt(Float.floatToIntBits(v));
    }

    /**
     *    double  out。
     */
    public final void writeDouble(double v) throws IOException {
    	writeLong(Double.doubleToLongBits(v));
    }

    /**
     *                  out
     * written + s.length();
     */
    public final void writeBytes(String s) throws IOException {
		int len = s.length();
		for (int i = 0 ; i < len ; i++) {
		    out.write((byte)s.charAt(i));
		}
		incCount(len);
    }

    /**
     *                out 
     * written + s.lengt()*2;
     */
    public final void writeChars(String s) throws IOException {
        int len = s.length();
        for (int i = 0 ; i < len ; i++) {
            int v = s.charAt(i);
            out.write((v >>> 8) & 0xFF); 
            out.write((v >>> 0) & 0xFF); 
        }
        incCount(len * 2);
    }

    /**
     *      writeUTF(String str, DataOutput out)         out。
     */
    public final void writeUTF(String str) throws IOException {
        writeUTF(str, this);
    }

    /**
     *         out。
     */
    static int writeUTF(String str, DataOutput out) throws IOException {
        int strlen = str.length();
		int utflen = 0;
		int c, count = 0;
 
		//   UTF-8 1~4     ;
		//      UTF-8      ,  UTF-8      。
		for (int i = 0; i < strlen; i++) {
	            c = str.charAt(i);
		    if ((c >= 0x0001) && (c <= 0x007F)) {
		    	utflen++;
		    } else if (c > 0x07FF) {
		    	utflen += 3;
		    } else {
		    	utflen += 2;
		    }
		}
	
		if (utflen > 65535)
		    throw new UTFDataFormatException(
	                "encoded string too long: " + utflen + " bytes");
	
	        byte[] bytearr = null;
	        if (out instanceof DataOutputStream) {
	            DataOutputStream dos = (DataOutputStream)out;
	            if(dos.bytearr == null || (dos.bytearr.length < (utflen+2)))
	                dos.bytearr = new byte[(utflen*2) + 2];
	            bytearr = dos.bytearr;
	        } else {
	            bytearr = new byte[utflen+2];
	        }
	    //             UTF-8      、             str.length + 2      out 。     str  dos.size()    。 
		bytearr[count++] = (byte) ((utflen >>> 8) & 0xFF);
		bytearr[count++] = (byte) ((utflen >>> 0) & 0xFF);  
        
        int i=0;
        for (i=0; i<strlen; i++) {
           c = str.charAt(i);
           if (!((c >= 0x0001) && (c <= 0x007F))) break;
           bytearr[count++] = (byte) c;
        }
	
		for (;i < strlen; i++){
	            c = str.charAt(i);
		    if ((c >= 0x0001) && (c <= 0x007F)) {
			bytearr[count++] = (byte) c;
	               
		    } else if (c > 0x07FF) {
			bytearr[count++] = (byte) (0xE0 | ((c >> 12) & 0x0F));
			bytearr[count++] = (byte) (0x80 | ((c >>  6) & 0x3F));
			bytearr[count++] = (byte) (0x80 | ((c >>  0) & 0x3F));
		    } else {
			bytearr[count++] = (byte) (0xC0 | ((c >>  6) & 0x1F));
			bytearr[count++] = (byte) (0x80 | ((c >>  0) & 0x3F));
		    }
		}
        out.write(bytearr, 0, utflen+2);
        return utflen + 2;
    }

    /**
     *     out         、    int     int   
     */
    public final int size() {
    	return written;
    }
}

4、       実例:
        DataInputStreamを使用して、DataOutputStreamに書き込まれたデータを読み込み、検証するために使用するため、ここでは両方のインスタンスを一緒にデモし、直接下にドラッグしてインスタンスを見ることができます.
二:DataInputStream
1、       クラス機能の概要:
       データバイト入力ストリーム、javaのIOシステムが同じ役割を果たすクラスの間に強い対称性があり、ここでは当然ながら、DataInputStreamがFilterInputStreamを継承し、DataInputインタフェースを実現し、FilterInputStream:フィルタバイト入力ストリーム、すべてのワード節入力ストリーム装飾クラスの親クラス、DataInput:DataOutput、頭の中ですぐにデータ入力が現れて、各種の方法を定義して、それぞれバイナリストリームをjava原始基礎タイプに変換することができて、DataInputの実現類DataInputStreamとして、作用はDataOutputStreamを使って目的の地の中のjava基礎タイプのデータをプログラムの中に読み取って、そしてjava基礎タイプに還元して、私達は直接プログラムの中で使用することができます.同様に装飾器、ブリッジの2つの設計モードを使用した.
2、DataInputStream APIの概要:
        A:構築方法
	DataInputStream(InputStream in);	              dis

       B:一般的な方法
	int read(byte b[]);		              
	
	int read(byte b[], int off, int len);		  len        off    len        b 、         
	
	void readFully(byte b[]);		  b.length       byte[] b  
	
	void readFully(byte b[], int off, int len)		  len        off    len        b 
	
	int skipBytes(int n);		  pis n   、          
	
	boolean readBoolean();		       boolean   
	
	byte readByte();		            
	
	int readUnsignedByte();		                    
	
	short readShort();		       short   
	
	int readUnsignedShort();		           short  
	
	char readChar();		       char   
	
	int readInt();		       int   
	
	long readLong();		       long   
	
	float readFloat();		       float   
	
	double readDouble();		       double   
	
	String readUTF();		       String   
	
	static String readUTF(DataInput in);		  in            

3、ソース分析:
package com.chy.io.original.code;

import java.io.DataInput;
import java.io.EOFException;
import java.io.IOException;
import java.io.UTFDataFormatException;

/**
 * DataInputStrem        、      、FilterInputStream      、
 *           InputStream        、DataInputStrem  FilterInputStream
 *             InputStream    :
 *      java                  、         DataOutputStream    InputStream          。
 * 
 */
public class DataInputStream extends FilterInputStream implements DataInput {
	java.io.DataInputStream
    /**
     *     FilterInputStream    、    InputStream        DataInputStream;
     */
    public DataInputStream(InputStream in) {
    	super(in);
    }

    /**
     * readUTF          
     */
    private byte bytearr[] = new byte[80];
    private char chararr[] = new char[80];

    /**
     *      InputStream   (    :in) read(byte b ,int off, int len)        ;
     *           :                          ;
     *           :in.read(byte[] b)、   、in.read(byte[] b)      in.read(byte[]b ,int off, int len)    、       ;
     */
    public final int read(byte b[]) throws IOException {
    	return in.read(b, 0, b.length);
    }

    /**
     *   in.read(byte[]b ,int off, int len)  len   ;
     */
    public final int read(byte b[], int off, int len) throws IOException {
    	return in.read(b, off, len);
    }

    /**
     *      readFully(byte[] b,int off, int len)  b.length   ; DataInput      
     */
    public final void readFully(byte b[]) throws IOException {
    	readFully(b, 0, b.length);
    }

    /**
     *  in   len   、 DataInput      
     */
    public final void readFully(byte b[], int off, int len) throws IOException {
		if (len < 0)
		    throw new IndexOutOfBoundsException();
		int n = 0;
		while (n < len) {
		    int count = in.read(b, off + n, len - n);
		    if (count < 0)
				throw new EOFException();
			    n += count;
		}
    }

    /**
     *   in  n   、                。
     */
    public final int skipBytes(int n) throws IOException {
    	
		int total = 0;
		int cur = 0;
	
		while ((total<n) && ((cur = (int) in.skip(n-total)) > 0)) {
		    total += cur;
		}
	
		return total;
    }

    /**
     *     DataOut  writeBoolean       。
     */
    public final boolean readBoolean() throws IOException {
    	//boolean     
		int ch = in.read();
		if (ch < 0)
		    throw new EOFException();
		return (ch != 0);
    }

    /**
     *     DataOut  writeByte()       、        -128   127(  )          。
     *         byte、          int、             。
     */
    public final byte readByte() throws IOException {
		int ch = in.read();
		if (ch < 0)
		    throw new EOFException();
		return (byte)(ch);
    }

    /**
     *         ,       (zero-extend)     int   ,     ,         0   255。
     *      DataOutput   writeByte        0   255     ,           writeByte      。
     */
    public final int readUnsignedByte() throws IOException {
		int ch = in.read();
		if (ch < 0)
		    throw new EOFException();
		return ch;
    }

    /**
     *               short  。
     */
    public final short readShort() throws IOException {
        int ch1 = in.read();
        int ch2 = in.read();
        if ((ch1 | ch2) < 0)
            throw new EOFException();
        return (short)((ch1 << 8) + (ch2 << 0));
    }

    /**
     *         ,    0   65535        int  。
     *      DataOutput   writeShort        0   65535      ,           writeShort      。 
     */
    public final int readUnsignedShort() throws IOException {
        int ch1 = in.read();
        int ch2 = in.read();
        if ((ch1 | ch2) < 0)
            throw new EOFException();
        return (ch1 << 8) + (ch2 << 0);
    }

    /**
     *               char  。
     */
    public final char readChar() throws IOException {
        int ch1 = in.read();
        int ch2 = in.read();
        if ((ch1 | ch2) < 0)
            throw new EOFException();
        return (char)((ch1 << 8) + (ch2 << 0));
    }

    /**
     *              int  
     */
    public final int readInt() throws IOException {
        int ch1 = in.read();
        int ch2 = in.read();
        int ch3 = in.read();
        int ch4 = in.read();
        if ((ch1 | ch2 | ch3 | ch4) < 0)
            throw new EOFException();
        return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
    }

    private byte readBuffer[] = new byte[8];

    /**
     *   8          long  
     */
    public final long readLong() throws IOException {
        readFully(readBuffer, 0, 8);
        return (((long)readBuffer[0] << 56) +
                ((long)(readBuffer[1] & 255) << 48) +
		((long)(readBuffer[2] & 255) << 40) +
                ((long)(readBuffer[3] & 255) << 32) +
                ((long)(readBuffer[4] & 255) << 24) +
                ((readBuffer[5] & 255) << 16) +
                ((readBuffer[6] & 255) <<  8) +
                ((readBuffer[7] & 255) <<  0));
    }

    /**
     *            float  
     */
    public final float readFloat() throws IOException {
    	return Float.intBitsToFloat(readInt());
    }

    /**
     *   8        double 
     */
    public final double readDouble() throws IOException {
    	return Double.longBitsToDouble(readLong());
    }

    /**
     *      readUTF(DataInut in)
     */
    public final String readUTF() throws IOException {
        return readUTF(this);
    }

    /**
     *                、    String  
     */
    public final static String readUTF(DataInput in) throws IOException {
    	//  “     ”   “    short  ”  :
    	//  DataOutputStream   writeUTF(String str)           2         
        int utflen = in.readUnsignedShort();
        byte[] bytearr = null;
        char[] chararr = null;
        if (in instanceof DataInputStream) {
            DataInputStream dis = (DataInputStream)in;
            if (dis.bytearr.length < utflen){
                dis.bytearr = new byte[utflen*2];
                dis.chararr = new char[utflen*2];
            }
            chararr = dis.chararr;
            bytearr = dis.bytearr;
        } else {
            bytearr = new byte[utflen];
            chararr = new char[utflen];
        }

        int c, char2, char3;
        int count = 0;
        int chararr_count=0;

        in.readFully(bytearr, 0, utflen);

        while (count < utflen) {
            c = (int) bytearr[count] & 0xff;      
            if (c > 127) break;
            count++;
            chararr[chararr_count++]=(char)c;
        }

        while (count < utflen) {
            c = (int) bytearr[count] & 0xff;
            switch (c >> 4) {
                case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
                    /* 0xxxxxxx*/
                    count++;
                    chararr[chararr_count++]=(char)c;
                    break;
                case 12: case 13:
                    /* 110x xxxx   10xx xxxx*/
                    count += 2;
                    if (count > utflen)
                        throw new UTFDataFormatException(
                            "malformed input: partial character at end");
                    char2 = (int) bytearr[count-1];
                    if ((char2 & 0xC0) != 0x80)
                        throw new UTFDataFormatException(
                            "malformed input around byte " + count); 
                    chararr[chararr_count++]=(char)(((c & 0x1F) << 6) | 
                                                    (char2 & 0x3F));  
                    break;
                case 14:
                    /* 1110 xxxx  10xx xxxx  10xx xxxx */
                    count += 3;
                    if (count > utflen)
                        throw new UTFDataFormatException(
                            "malformed input: partial character at end");
                    char2 = (int) bytearr[count-2];
                    char3 = (int) bytearr[count-1];
                    if (((char2 & 0xC0) != 0x80) || ((char3 & 0xC0) != 0x80))
                        throw new UTFDataFormatException(
                            "malformed input around byte " + (count-1));
                    chararr[chararr_count++]=(char)(((c     & 0x0F) << 12) |
                                                    ((char2 & 0x3F) << 6)  |
                                                    ((char3 & 0x3F) << 0));
                    break;
                default:
                    /* 10xx xxxx,  1111 xxxx */
                    throw new UTFDataFormatException(
                        "malformed input around byte " + count);
            }
        }
        // The number of chars produced may be less than utflen
        return new String(chararr, 0, chararr_count);
    }

	/**
	 *       、      
	 */
	public String readLine() throws IOException {
		return null;
	}
}

4、実例提示:
package com.chy.io.original.test;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
 * DataInputStream、DataOutputStream   。             。
 * @author  andyChen
 * @version 1.1, 13/11/10
 */
public class DataStreamTest {
	private final static byte[] byteArray = {0x61, 0x62, 0x63, 0x64, 0x65};
	private static byte[] buff = new byte[5];
	private static DataOutputStream dos;
	private static DataInputStream dis;
	
	/**
	 * DataOutputStream   :      java      out 。 
	 */
	public static void testDataOutputStream() throws IOException{
		dos = new DataOutputStream(new FileOutputStream(new File("D:\\dos.txt")));
		dos.write(0x61);
		dos.write(byteArray, 0, 3);
		dos.write(byteArray);
		dos.writeBoolean(false);
		dos.writeByte(0x61);
		dos.writeShort(32766);
		dos.writeChar("c".charAt(0));
		dos.writeInt(214783647);
		System.out.println(dos.size());
		dos.writeFloat(5.12F);//  float     4   
		dos.writeDouble(55.55);
		System.out.println(dos.size());
		dos.writeUTF("e");
		System.out.println(dos.size());
		dos.writeUTF("a  b");//        3   、              
		System.out.println(dos.size());
		dos.writeLong(1L);

		System.out.println("dos     :" + dos.size());
		dos.close();
	}
	/**
	 * 
	 * DataInputstream   :     :   DataOutputStream   、       、                   、
	 *   :  DataoutputStream java      out  、                    、
	 * DataInputStream                      、           。                    。
	 */
	public static void testDataInputStream() throws IOException{
		//   FileInputStream     dis;
		dis = new DataInputStream(new FileInputStream(new File("D:\\dos.txt")));
		
       	System.out.println(byteToString((byte)dis.read()));
		//System.out.println(dis.readUnsignedByte());       、               、     byte      0 - 255      。
		System.out.println("     :" + dis.available());
		dis.readFully(buff, 0, 3);
		printByteValue(buff);
		
		dis.readFully(buff);
		printByteValue(buff);
		
		System.out.println(dis.readBoolean());
		System.out.println(byteToString(dis.readByte()));
		System.out.println(dis.readShort());
//		System.out.println(dis.readUnsignedShort()); readUnsignedByte()         、       。
		System.out.println(dis.readChar());
		System.out.println(dis.readInt());
		System.out.println(dis.readFloat());
		System.out.println(dis.readDouble());
		/**
		 *            :                     ?   ?                    ?
		 *    、         :                     、    、     、
		 *          ?                 ?
		 *        :DataOutputStream    writeUTF(String str)  、      String str          、            。
		 *          : DataInputSrteam readUTF()          、                     、              str。
		 */
		System.out.println(dis.readUTF());
		System.out.println(dis.readUTF());
		System.out.println(dis.readLong());
	}
	
	public static void testDataInputStreamSkipByte() throws IOException{
		//          dos       、     dos                。         、                 !
		dis = new DataInputStream(new FileInputStream(new File("D:\\dos.txt")));
		dis.skip(1);//FileInputStream    skip  
		System.out.println(dis.available());
		dis.read(buff, 0, 3);
		printByteValue(buff);
		dis.skipBytes(5);//DataInputStream       
		System.out.println(dis.readBoolean());
		//      dos      、   、ByteArrayInputStream        count - pos;
		dis.skip(dos.size() + 1);
		System.out.println(dis.available());
	}
	
	public static void main(String[] args) throws IOException {
		testDataOutputStream();
		testDataInputStream();
		//testDataInputStreamSkipByte();
	}
	
	private static void printByteValue(byte[] buf) {
		for(byte b : buf){
			if(b != 0){
				System.out.print(byteToString(b) + " ");
			}
		}
		System.out.println();
	}
	private static String byteToString(byte b){
		byte[] bAray = {b};
		return new String (bAray);
	}
}

まとめ:
       DataInputStream、DataOutputStreamの2つの クラスの は、 バイトストリームを することであり、javaベースデータが やプログラムで に なく できるようにすることであり、DataOutputStreamの は、javaベースタイプのデータルートを のルールに って じバイナリストリームに し、 された ストリームを び すwriteである(byte b)、write(byte[]b,int off,int len)メソッドは、このバイナリストリームをdosに き み、さらに に する.DataInputStreamのコアは、 された バイト ストリームを び すread(byteb)、read(byte[]b,int off,int len)であるソースにdosで き まれたjavaベースデータのバイト のデータをバイト でプログラムに み し、 の ルールに って するjavaベースタイプのデータに します.boolean のデータが「0」または「1」のように「true」または「false」を すために「0」と かれている に ります「true」という は、
    すべきは、DataInputStreamが み すバイトは、DataOutputStreamがバイトを き む で み るので、バイトをむやみに み ることはできません.この2つのクラスを しく うには、データを み るタイプの とデータを き むタイプの が することが も です.skipBytesメソッドを する がある は、Datを び すときに に る があります.aOutputStreamがjavaベースタイプに き まれたとき、 ベースタイプが に バイトを めるか、スキップした に のバイトまたは1 のバイトが すjavaベースタイプはどれですか.ここでは、この2つのクラスを しく するには、もちろん、 に たちが しているときにどのように き まれたか、どのように み ればいいかをよく っておく があります.そして、そうではありませんすべての でよく われます.よく う を につけ、あまり わないときにAPIを べればok、
        もう つ、その の の です. が のStringを き んだとき、 に み めば、それぞれ み めるのか、どの を み むのか、 じ き みではない をどのように するのか、パラメータを していないのか、プログラムはどのように っていますか. :DataOutputStreamが を き んだとき、どれだけ くなりますか.2バイト、2バイトは き む の さを すために われているので、DataInputStreamを して を み ると、まず に み す の さが み られ、その 、 はこれらのバイトを み ってから み りを し、 み りの を に して します.
その IOコンテンツ:java_ioシステムのディレクトリ