ÀÖÓãµç¾º





½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

JavaÅàѵʵս½Ì³ÌÖ®JavaNIO

¸üÐÂʱ¼ä:2015Äê12ÔÂ29ÈÕ13ʱ23·Ö À´Ô´:ÀÖÓã²¥¿ÍJavaÅàѵѧԺ ä¯ÀÀ´ÎÊý:

JavaÖеÄI/OÁ÷»òÕßÊäÈë/Êä³öÁ÷ÊÇÖ¸Êý¾ÝÔÚ±¾µØÎļþ»òÍøÂçÖÐÒÔÁ÷µÄ·½Ê½½øÐд«Ê䡣еÄÊäÈë/Êä³ö(NIO)¿âÊÇÔÚJDK1.4°æ±¾ÖÐÒýÈëµÄ¡£NIOÃÖ²¹ÁËÔ­À´µÄI/OµÄ²»×㣬ËüÔÚ±ê×¼Java´úÂëÖÐÌṩÁ˸ßËٵġ¢ÃæÏò¿éµÄI/O¡£
Ô­À´µÄI/O¿âÓëNIO×îÖØÒªµÄÇø±ðÊÇÊý¾Ý´ò°üºÍ´«Ê䷽ʽµÄ²»Í¬£¬Ô­À´µÄI/OÒÔÁ÷µÄ·½Ê½´¦ÀíÊý¾Ý£¬¶øNIOÒÔ¿éµÄ·½Ê½´¦ÀíÊý¾Ý¡£
ÃæÏòÁ÷µÄI/Oϵͳһ´ÎÒ»¸ö×ֽڵش¦ÀíÊý¾Ý¡£Ò»¸öÊäÈëÁ÷¶Áȡһ¸ö×Ö½ÚµÄÊý¾Ý£¬Ò»¸öÊä³öÁ÷д³öÒ»¸ö×Ö½ÚµÄÊý¾Ý£¬ÎªÁ÷ʽÊý¾Ý´´½¨¹ýÂËÆ÷·Ç³£ÈÝÒס£Á´½Ó¼¸¸ö¹ýÂËÆ÷£¬ÒÔ±ãÿ¸ö¹ýÂËÆ÷Ö»¸ºÔ𵥸ö¸´ÔÓ´¦Àí»úÖÆµÄÒ»²¿·Ö£¬ÕâÑùÒ²ÊÇÏà¶Ô¼òµ¥µÄ¡£²»ÀûµÄÒ»ÃæÊÇ£¬ÃæÏòÁ÷µÄI/Oͨ³£Ï൱Âý¡£
NIOÓëÔ­À´µÄI/OÓÐͬÑùµÄ×÷ÓúÍÄ¿µÄ£¬µ«ÊÇËüʹÓÿéI/OµÄ´¦Àí·½Ê½¡£Ã¿Ò»¸ö²Ù×÷¶¼ÔÚÒ»²½ÖжÁÈ¡»òÕßд³öÒ»¸öÊý¾Ý¿é¡£°´¿é´¦ÀíÊý¾Ý±È°´Á÷ʽµÄ×Ö½Ú´¦ÀíÊý¾ÝÒª¿ìºÜ¶à¡£µ«ÊÇÃæÏò¿éµÄI/OȱÉÙÒ»Ð©ÃæÏòÁ÷µÄI/OËù¾ßÓеÄÓÅÑÅÐԺͼòµ¥ÐÔ¡£
ÏÂÃæÎÒÃÇ´ÓÒ»¸ö¼òµ¥µÄʹÓÃIOºÍNIO¶Áȡһ¸öÎļþÖеÄÄÚÈÝΪÀý£¬½øÐÐNIOµÄѧϰ¡£
/**
 * ʹÓÃIO¶Áȡָ¶¨ÎļþµÄǰ1024¸ö×Ö½ÚµÄÄÚÈÝ
 * @param file Ö¸¶¨ÎļþÃû³Æ
 * @throws java.io.IOException IOÒì³£
 */
public void ioRead(String file) throws IOException {
FileInputStream in = new FileInputStream(file);
byte[] b = new byte[1024];
in.read( b );
System.out.println(new String(b));
}
 
/**
 * ʹÓÃNIO¶Áȡָ¶¨ÎļþµÄǰ1024¸ö×Ö½ÚµÄÄÚÈÝ
 * @param file Ö¸¶¨ÎļþÃû³Æ
 * @throws java.io.IOException IOÒì³£
 */
public void nioRead(Stirng file) thorws IOException {
FileInputStream in = new FileInputStream(file);
FileChannel channel = in.getChanel();
 
ByteBuffer buffer = ByteBuffer.allocate(1024);
channel.read( buffer );
byte[] b = buffer.array();
System.out.println( new String( b ));
}
ͨµÀºÍ»º³åÇøÊÇNIOÖеĺËÐĶÔÏ󣬼¸ºõÔÚÿһ¸öI/O²Ù×÷Öж¼ÒªÊ¹ÓÃËüÃÇ¡£
»º³åÇø(Buffer)ʵÖÊÉÏÊÇÒ»¸öÈÝÆ÷¶ÔÏó£¬Ëü°üº¬Ò»Ð©ÒªÐ´Èë»òÕ߸նÁ³öµÄÊý¾Ý¡£ÔÚNIOÖмÓÈëBuffer¶ÔÏó£¬ÌåÏÖÁËпâÓëÔ­I/OµÄÒ»¸öÖØÒªÇø±ð¡£
ÔÚÃæÏòÁ÷µÄI/OÖУ¬½«Êý¾ÝÖ±½ÓдÈë»òÕß½«Êý¾ÝÖ±½Ó¶Áµ½Stream¶ÔÏóÖС£
ÔÚNIO¿âÖУ¬ËùÓÐÊý¾Ý¶¼ÊÇÓûº³åÇø´¦ÀíµÄ¡£ÔÚ¶ÁÈ¡Êý¾Ýʱ£¬ËüÊÇÖ±½Ó¶Áµ½»º³åÇøÖеÄ¡£ÔÚдÈëÊý¾Ýʱ£¬ËüÊÇдÈëµ½»º³åÇøÖеÄ¡£ÈκÎʱºò·ÃÎÊNIOÖеÄÊý¾Ý£¬¶¼Êǽ«Ëü·Åµ½»º³åÇøÖС£
»º³åÇøÊµÖÊÉÏÊÇÒ»¸öÊý×顣ͨ³£ËüÊÇÒ»¸ö×Ö½ÚÊý×飬µ«ÊÇÒ²¿ÉÒÔʹÓÃÆäËûÖÖÀàµÄÊý×é¡£µ«ÊÇÒ»¸ö»º³åÇø²»½ö½öÊÇÒ»¸öÊý×é¡£»º³åÇøÌṩÁ˶ÔÊý¾ÝµÄ½á¹¹»¯·ÃÎÊ£¬¶øÇÒ»¹¿ÉÒÔ¸ú×ÙϵͳµÄ¶Á/д½ø³Ì¡£×î³£ÓõĻº³åÇøÀàÐÍÊÇByteBuffer¡£ Ò»¸öByteBuffer¿ÉÒÔÔÚÆäµ×²ã×Ö½ÚÊý×éÉϽøÐÐget/set²Ù×÷(¼´×ֽڵĻñÈ¡ºÍÉèÖÃ)¡£
ͨµÀ(Channel)ÊǶÔÔ­I/O°üÖеÄÁ÷µÄÄ£Ä⣬¿ÉÒÔͨ¹ýËü¶ÁÈ¡ºÍдÈëÊý¾Ý¡£ÄÃNIOÓëÔ­À´µÄI/O×ö¸ö±È½Ï£¬Í¨µÀ¾ÍÏñÊÇÁ÷¡£
ÕýÈçÇ°ÃæÌáµ½µÄ£¬ËùÓÐÊý¾Ý¶¼Í¨¹ýBuffer¶ÔÏóÀ´´¦Àí¡£ÓÀÔ¶²»»á½«×Ö½ÚÖ±½ÓдÈëͨµÀÖУ¬Ïà·´£¬¶ø»á½«Êý¾ÝдÈë°üº¬Ò»¸ö»òÕß¶à¸ö×ֽڵĻº³åÇø¡£Í¬Ñù£¬²»»áÖ±½Ó´ÓͨµÀÖжÁÈ¡×Ö½Ú£¬¶øÊǽ«Êý¾Ý´ÓͨµÀ¶ÁÈ뻺³åÇø£¬ÔÙ´Ó»º³åÇø»ñÈ¡Õâ¸ö×Ö½Ú¡£
ͨµÀÓëÁ÷µÄ²»Í¬Ö®´¦ÔÚÓÚͨµÀÊÇË«ÏòµÄ¡£¶øÁ÷Ö»ÊÇÔÚÒ»¸ö·½ÏòÉÏÒÆ¶¯(Ò»¸öÁ÷±ØÐëÊÇ
InputStream»òÕßOutputStreamµÄ×ÓÀà)£¬ ¶øÍ¨µÀ¿ÉÒÔÓÃÓÚ¶Á¡¢Ð´»òÕßͬʱÓÃÓÚ¶Áд¡£
¶ÁºÍдÊÇI/OµÄ»ù±¾¹ý³Ì¡£´ÓÒ»¸öͨµÀÖжÁÈ¡ºÜ¼òµ¥£ºÖ»Ðè´´½¨Ò»¸ö»º³åÇø£¬È»ºóÈÃͨµÀ½«Êý¾Ý¶Áµ½Õâ¸ö»º³åÇøÖС£Ð´ÈëÒ²Ï൱¼òµ¥£º´´½¨Ò»¸ö»º³åÇø£¬ÓÃÊý¾ÝÌî³äËü£¬È»ºóÈÃͨ µÀÓÃÕâЩÊý¾ÝÀ´Ö´ÐÐдÈë²Ù×÷¡£
Èç¹ûʹÓÃÔ­À´µÄI/O£¬ÄÇôÎÒÃÇÖ»Ðè´´½¨Ò»¸öFileInputStream²¢´ÓËüÄÇÀï¶ÁÈ¡¡£¶øÔÚNIOÖУ¬Çé¿öÉÔÓв»Í¬£ºÎÒÃÇÊ×ÏÈ´ÓFileInputStream»ñȡһ¸öFileChannel¶ÔÏó£¬È»ºóʹÓÃÕâ¸öͨµÀÀ´¶ÁÈ¡Êý¾Ý¡£
ÔÚNIOϵͳÖУ¬ÈκÎʱºòÖ´ÐÐÒ»¸ö¶Á²Ù×÷£¬¶¼ÊÇ´ÓͨµÀÖжÁÈ¡£¬µ«ÊDz»ÊÇÖ±½Ó´ÓͨµÀ¶ÁÈ¡¡£ÒòΪËùÓÐÊý¾Ý×îÖÕ¶¼×¤ÁôÔÚ»º³åÇøÖУ¬ËùÒÔÊÇ´ÓͨµÀ¶Áµ½»º³åÇøÖС£
ÏÖÔÚ£¬ÈÃÎÒÃÇ¿´Ò»ÏÂNIO»ù±¾¶ÁдÊý¾ÝµÄ¹ý³Ì¡£
ÔÚNIOÖжÁÈ¡ÎļþÉæ¼°µÄÈý¸ö²½Ö裺
// µÚÒ»²½ÊÇ»ñȡͨµÀ¡£ÎÒÃÇ´Ó FileInputStream »ñȡͨµÀ£º
FileInputStream fin = new FileInputStream( "readandshow.txt" );
FileChannel fc = fin.getChannel();
// ÏÂÒ»²½ÊÇ´´½¨»º³åÇø£º
ByteBuffer buffer = ByteBuffer.allocate( 1024 );
// ×îºó£¬ÐèÒª½«Êý¾Ý´ÓͨµÀ¶Áµ½»º³åÇøÖУº
fc.read( buffer );
ÔÚ NIO ÖÐдÈëÎļþÀàËÆÓÚ´ÓÎļþÖжÁÈ¡
// Ê×ÏÈ´Ó FileOutputStream »ñȡһ¸öͨµÀ£º
FileOutputStream fout = new FileOutputStream( "writesomebytes.txt" );
FileChannel fc = fout.getChannel();
// ÏÂÒ»²½ÊÇ´´½¨Ò»¸ö»º³åÇø²¢ÔÚÆäÖзÅÈëһЩÊý¾Ý£¬ÕâÀÓÃdataÀ´±íʾһ¸ö³ÖÓÐÊý¾ÝµÄÊý×é¡£
ByteBuffer buffer = ByteBuffer.allocate( 1024 );
for (int i=0; i<data.length; ++i) {
buffer.put( data[i] );
}
buffer.flip();
// ×îºóÒ»²½ÊÇдÈ뻺³åÇøÖУº
fc.write( buffer );
ÏÂÃæÊ¹ÓÃNIO½øÐжÁд½áºÏ£¬½«Ò»¸öÎļþµÄËùÓÐÄÚÈÝ¿½±´µ½ÁíÒ»¸öÎļþÖÐ
/**
 * ½«Ò»¸öÎļþµÄËùÓÐÄÚÈÝ¿½±´µ½ÁíÒ»¸öÎļþÖС£
 * Ö´ÐÐÈý¸ö»ù±¾²Ù×÷:
 *     Ê×ÏÈ´´½¨Ò»¸ö Buffer
 *     È»ºó´ÓÔ´ÎļþÖн«Êý¾Ý¶Áµ½Õâ¸ö»º³åÇøÖÐ
 *     ×îºó½«»º³åÇøÐ´ÈëÄ¿±êÎļþ
 *     ³ÌÐò²»¶ÏÖØ¸´(¶Á¡¢Ð´¡¢¶Á¡¢Ð´) Ö±µ½Ô´Îļþ½áÊø
 */
public static void main(String[] args) throws Exception {
    String infile = "C:\\copy.sql";String outfile = "C:\\copy.txt";
    // »ñȡԴÎļþºÍÄ¿±êÎļþµÄÊäÈëÊä³öÁ÷
    FileInputStream fin = new FileInputStream(infile);
    FileOutputStream fout = new FileOutputStream(outfile);
    // »ñÈ¡ÊäÈëÊä³öͨµÀ
FileChannel fcin = fin.getChannel();
FileChannel fcout = fout.getChannel();
    // ´´½¨»º³åÇø
    ByteBuffer buffer = ByteBuffer.allocate(1024);
    while (true) {
        // clear·½·¨£¬ÖØÉ軺³åÇø£¬Ê¹Ëü¿ÉÒÔ½ÓÊܶÁÈëµÄÊý¾Ý
        buffer.clear();
        // ´ÓÊäÈëͨµÀÖн«Êý¾Ý¶Áµ½»º³åÇø
        int r = fcin.read(buffer);
        // read·½·¨£¬·µ»Ø¶ÁÈ¡µÄ×Ö½ÚÊý£¬¿ÉÄÜΪÁ㣬Èç¹û¸ÃͨµÀÒѵ½´ïÁ÷µÄĩβÔò·µ»Ø-1
        if (r == -1) {
            break;
        }
        // flip·½·¨£¬Èûº³åÇø¿ÉÒÔ½«Ð¶ÁÈëµÄÊý¾Ý£¬Ð´Èëµ½ÁíÒ»¸öͨµÀÖÐ
        buffer.flip();
        // ´ÓÊä³öͨµÀÖн«Êý¾ÝдÈ뻺³åÇø
        fcout.write(buffer);
}
}
ͨ¹ýÒÔÉϵĽéÉÜ£¬ÎÒÃǶ®µÃÁËʲôÊÇNIO£¬Á˽âÁËNIOÓëIOµÄÇø±ð£¬ÒÔ¼°ÈçºÎͨ¹ýNIO½øÐÐÎļþµÄ»ù±¾¶Áд²Ù×÷¡£ÈôÄú¶ÔNIO¸ÐÐËȤ£¬»¹¿ÉÒÔ½øÐиüÉîÈëµÄѧϰÁ˽â¡£


 ±¾ÎİæÈ¨¹éÀÖÓã²¥¿ÍJavaÅàѵѧԺËùÓУ¬»¶Ó­×ªÔØ£¬×ªÔØÇë×¢Ã÷×÷Õß³ö´¦¡£Ð»Ð»£¡
×÷ÕߣºÀÖÓã²¥¿ÍJavaÅàѵѧԺ
Ê×·¢£ºhttp://www.itcast.cn/javaee 
0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿