最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中IO流 字節(jié)流實例詳解

 更新時間:2017年05月14日 15:05:52   投稿:lqh  
這篇文章主要介紹了Java中IO流 字節(jié)流實例詳解的相關資料,需要的朋友可以參考下

Java中IO流 字節(jié)流實例詳解

IO流(輸入流、輸出流),又分為字節(jié)流、字符流。

  流是磁盤或其它外圍設備中存儲的數(shù)據(jù)的源點或終點。

  輸入流:程序從輸入流讀取數(shù)據(jù)源。數(shù)據(jù)源包括外界(鍵盤、文件、網(wǎng)絡…),即是將數(shù)據(jù)源讀入到程序的通信通道。

  輸出流:程序向輸出流寫入數(shù)據(jù)。將程序中的數(shù)據(jù)輸出到外界(顯示器、打印機、文件、網(wǎng)絡…)的通信通道。

字節(jié)流

  1.InputStream、OutputStream

  InputStream抽象了應用程序讀取數(shù)據(jù)的方式

  OutputStream抽象了應用程序寫出數(shù)據(jù)的方式

  2.讀到文件結尾,稱為EOF = end,讀到-1就讀到結尾

  3.輸入流基本方法

  int b = in.read();讀取一個字節(jié),無符號填充到int的低八位.-1是EOF

  int.read(byte[] buf)讀取數(shù)據(jù)填充到字節(jié)數(shù)組buf

  int.read(byte[] buf, int start, int size)讀取數(shù)據(jù)填充到字節(jié)數(shù)組buf,從buf的start位置開始存儲size長度的數(shù)據(jù)

  4.輸出流基本方法

  out.write(int b);寫出一個byte到流,b的低八位

  out.write(byte[] buf);將buf字節(jié)數(shù)組都寫入到流

  out.write(byte[] buf, int start, int size);字節(jié)數(shù)組buf從start位置開始寫size長度的字節(jié)到流

  5.FileInputStream是InputStream的子類,具體實現(xiàn)了在文件上讀取數(shù)據(jù)

    6.FileOutputStream是OutputStream的子類,實現(xiàn)了向文件中寫出字節(jié)數(shù)據(jù)的方法

  FileInputStream的demo:

package com.test.io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class IOUtils {
  /**
   * 讀取指定文件內(nèi)容,按照十六進制輸出到控制臺
   * 并且每輸出10個byte換行
   * @param fileName
   * @throws IOException
   */
  public static void printHex(String fileName) throws IOException {
    //把文件作為字節(jié)流進行讀操作
    FileInputStream in = new FileInputStream(fileName);
    int b;
    int i = 1;
    while ((b = in.read()) != -1) {
      if (b <= 0xf) {
        System.out.print("0");
      }
      System.out.print(Integer.toHexString(b) + " ");
      if (i % 10 == 0) {
        System.out.println("");
      }
      i++;
    }
    in.close();
  }

  public static void printHexByByteArray(String fileName) throws IOException {
    FileInputStream in = new FileInputStream(fileName);
    byte[] buf = new byte[20*1024];
    
    //如果字節(jié)數(shù)組夠大,可以一次性讀完
    //從in中批量讀取字節(jié),放入到buf這個字節(jié)數(shù)組中,從第0個位置開始放,最多放buf.length個,返回的是讀到的字節(jié)的個數(shù)
    /* int bytes = in.read(buf, 0, buf.length);
    int j = 1;
    for(int i = 0;i < bytes; i++) {
      if (buf[i] <= 0xf) {
        System.out.print("0");
      }
      System.out.print(Integer.toHexString(buf[i] & 0xff) + " ");
      if (j % 10 == 0) {
        System.out.println("");
      }
      j++;
    } */
    
    //如果字節(jié)數(shù)組不夠大,不能一次性讀完
    int bytes = 0;
    int j = 1;
    while ((bytes = in.read(buf, 0, buf.length)) != -1) {
      for (int i = 0; i <bytes; i++) {
        if (buf[i] <= 0xf) {
          System.out.print("0");
        }
        System.out.print(Integer.toHexString(buf[i] & 0xff) + " ");
        if (j % 10 == 0) {
          System.out.println("");
        }
        j++;
      }
    }
  }

}

  FileOutputStream的demo:

package com.test.io;

import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputDemo {

  public static void main(String[] args) throws IOException {
    //如果該文件不存在,則直接創(chuàng)建,如果存在,刪除后創(chuàng)建。(如果第二個參數(shù)為 true,則將字節(jié)寫入文件末尾處,而不是寫入文件開始處。)
    FileOutputStream out = new FileOutputStream("F:\\javaio\\out.dat");
    out.write('A');//寫入了‘A'的低八位(一次只寫入一個字節(jié))
    int a = 10;
    out.write(a >>> 24);
    out.write(a >>> 16);
    out.write(a >>> 8);
    out.write(a);
    
    byte[] b = "10".getBytes();
    out.write(b);
    
    out.close();
    
    IOUtils.printHex("F:\\javaio\\out.dat");    
  }
}

  7.DataOutputStream和DataInputStream,對流功能的擴展,可以更加方便的讀取int,long,字符等類型數(shù)據(jù)。

package com.test.io;

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataOutputDemo {

  public static void main(String[] args) throws IOException {
    String file = "F:\\javaio\\b.txt";
    DataOutputStream dos = new DataOutputStream(new FileOutputStream(file));
    dos.writeInt(10);
    dos.writeInt(-10);
    dos.writeLong(10l);
    dos.writeDouble(10.5);
    dos.writeUTF("你好");
    dos.writeChars("中國");
    dos.close();
    IOUtils.printHex(file);
  }
}

  運行結果:

00 00 00 0a ff ff ff f6 00 00 
00 00 00 00 00 0a 40 25 00 00 
00 00 00 00 00 06 e4 bd a0 e5 
a5 bd 4e 2d 56 fd 

  其中,00 06兩個字節(jié)是“你好”這兩個中文的字節(jié)個數(shù)。

package com.test.io;

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class DataInputDemo {

  public static void main(String[] args) throws IOException {
    String file = "F:\\javaio\\b.txt";
    DataInputStream dis = new DataInputStream(new FileInputStream(file));
    int i = dis.readInt();
    System.out.println(i);
    i = dis.readInt();
    System.out.println(i);
    long l = dis.readLong();
    System.out.println(l);
    double d = dis.readDouble();
    System.out.println(d);
    String s = dis.readUTF();
    System.out.println(s);
    dis.close();
  }

}

  運行結果:

10
-10
10
10.5
你好

   8.BufferedInputStream&BufferedOutputStream,這兩個流類為IO提供了帶緩沖區(qū)的操作,一般打開文件進行寫入或讀取操作時,都會加上緩沖,這種流模式提高了IO的性能。

  文件的拷貝:

package com.test.io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class IOUtils {/**
   * 拷貝文件,字節(jié)批量讀取
   * @param srcFile 源文件
   * @param destFile 目標文件
   * @throws IOException
   */
  public static void copyFile(File srcFile, File destFile) throws IOException {
    if (!srcFile.exists()) {
      throw new IllegalArgumentException("文件" + srcFile + "不存在");
    }
    if (!srcFile.isFile()) {
      throw new IllegalArgumentException(srcFile + "不是文件");
    }
    FileInputStream in = new FileInputStream(srcFile);
    FileOutputStream out = new FileOutputStream(destFile);
    byte[] buf = new byte[10*1024];
    int b;
    while ((b = in.read(buf, 0, buf.length)) != -1) {
      out.write(buf,0,b);
      out.flush();//最好加上,刷新此輸出流并強制寫出所有緩沖的輸出字節(jié)。
    }
    in.close();
    out.close();
  }
  /**
   * 拷貝文件,利用帶緩沖的字節(jié)流
   * @param srcFile
   * @param destFile
   * @throws IOException
   */
  public static void copyFileByBuffer(File srcFile, File destFile) throws IOException {
    if (!srcFile.exists()) {
      throw new IllegalArgumentException("文件" + srcFile + "不存在");
    }
    if (!srcFile.isFile()) {
      throw new IllegalArgumentException(srcFile + "不是文件");
    }
    FileInputStream in = new FileInputStream(srcFile);
    FileOutputStream out = new FileOutputStream(destFile);
    
    BufferedInputStream bis = new BufferedInputStream(in);
    BufferedOutputStream bos = new BufferedOutputStream(out);
    
    int c;
    while ((c = bis.read()) != -1) {
      bos.write(c);
      bos.flush();
    }
    
    bis.close();
    bos.close();
  }
  /**
   * 拷貝文件,通過單字節(jié)讀取
   * @param srcFile
   * @param destFile
   * @throws IOException
   */
  public static void copyFileByByte(File srcFile, File destFile) throws IOException {
    if (!srcFile.exists()) {
      throw new IllegalArgumentException("文件" + srcFile + "不存在");
    }
    if (!srcFile.isFile()) {
      throw new IllegalArgumentException(srcFile + "不是文件");
    }
    FileInputStream in = new FileInputStream(srcFile);
    FileOutputStream out = new FileOutputStream(destFile);
    
    int c;
    while ((c = in.read()) != -1) {
      out.write(c);
      out.flush();
    }
    
    in.close();
    out.close();
  }
}

  測試文件拷貝:

package com.test.io;

import java.io.File;
import java.io.IOException;

public class IOUtilsTest {

  public static void main(String[] args) {
    //IOUtils.printHex("D:\\javaProgram\\Hello.java");
    try {
      long start = System.currentTimeMillis();
      //IOUtils.copyFile(new File("F:\\javaio\\1.mp3"), new File("F:\\javaio\\2.mp3"));//211ms
      //IOUtils.copyFileByBuffer(new File("F:\\javaio\\1.mp3"), new File("F:\\javaio\\3.mp3"));//18583ms
      IOUtils.copyFileByByte(new File("F:\\javaio\\1.mp3"), new File("F:\\javaio\\4.mp3"));//37822ms
      long end = System.currentTimeMillis();
      System.out.println(end - start);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

  根據(jù)以上測試看出,文件拷貝,最快的方式是通過字節(jié)的批量讀取。

        感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • OutOfMemoryError內(nèi)存不足和StackOverflowError堆棧溢出示例詳解

    OutOfMemoryError內(nèi)存不足和StackOverflowError堆棧溢出示例詳解

    這篇文章主要為大家介紹了OutOfMemoryError內(nèi)存不足和StackOverflowError堆棧溢出示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Maven打包SpringBoot工程的實現(xiàn)示例

    Maven打包SpringBoot工程的實現(xiàn)示例

    在使用Spring Boot和Maven的項目中,你可以使用Maven來打包你的項目,本文主要介紹了Maven打包SpringBoot工程的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • 常用數(shù)據(jù)庫的驅動程序及JDBC URL分享

    常用數(shù)據(jù)庫的驅動程序及JDBC URL分享

    這篇文章主要介紹了常用數(shù)據(jù)庫的驅動程序及 JDBC URL,需要的朋友可以看下
    2014-01-01
  • Netty網(wǎng)絡編程實戰(zhàn)之搭建Netty服務器

    Netty網(wǎng)絡編程實戰(zhàn)之搭建Netty服務器

    Netty是JBOSS開源的一款NIO網(wǎng)絡編程框架,可用于快速開發(fā)網(wǎng)絡的應用。Netty是一個異步的、基于事件驅動的網(wǎng)絡應用框架,用于快速開發(fā)高性能的服務端和客戶端。本文將詳細說說如何搭建Netty服務器,需要的可以參考一下
    2022-10-10
  • SpringBoot整合Dozer映射框架流程詳解

    SpringBoot整合Dozer映射框架流程詳解

    dozer是用來兩個對象之間屬性轉換的工具,有了這個工具之后,我們將一個對象的所有屬性值轉給另一個對象時,就不需要再去寫重復的set和get方法了,下面介紹下SpringBoot中Dozer的使用,感興趣的朋友一起看看吧
    2022-07-07
  • Springboot中yml文件不生效原因分析及解決方案

    Springboot中yml文件不生效原因分析及解決方案

    本文介紹了SpringBoot項目中YML文件不生效的常見原因及解決方案,包括格式錯誤、文件名錯誤、配置文件位置、激活的Profile、yml文件未加載、依賴問題、環(huán)境變量覆蓋和代碼中的硬編碼配置,通過以下步驟,可以解決大部分YML文件配置不生效的問題
    2024-11-11
  • Java和Rust實現(xiàn)JSON序列化互轉的解決方案詳解

    Java和Rust實現(xiàn)JSON序列化互轉的解決方案詳解

    這篇文章主要為大家詳細介紹了Java和Rust實現(xiàn)JSON序列化互轉的解決方案,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • 基于mybatis中數(shù)組傳遞注意事項

    基于mybatis中數(shù)組傳遞注意事項

    這篇文章主要介紹了mybatis中數(shù)組傳遞注意事項,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java函數(shù)式編程(八):字符串及方法引用

    Java函數(shù)式編程(八):字符串及方法引用

    這篇文章主要介紹了Java函數(shù)式編程(八):字符串及方法引用,本文是系列文章的第8篇,其它文章請參閱本文底部的相關文章,需要的朋友可以參考下
    2014-09-09
  • 詳解如何在SpringBoot中優(yōu)雅地重試調(diào)用第三方API

    詳解如何在SpringBoot中優(yōu)雅地重試調(diào)用第三方API

    在實際的應用中,我們經(jīng)常需要調(diào)用第三方API來獲取數(shù)據(jù)或執(zhí)行某些操作,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12

最新評論

东乌珠穆沁旗| 河南省| 远安县| 宜黄县| 遂平县| 涟源市| 金堂县| 常德市| 田阳县| 福鼎市| 怀仁县| 德钦县| 贺州市| 汝州市| 泽州县| 东莞市| 昌邑市| 乌鲁木齐县| 襄汾县| 天全县| 土默特右旗| 深泽县| 阳山县| 灵武市| 沾化县| 太白县| 缙云县| 澄城县| 中宁县| 临猗县| 建宁县| 江油市| 青铜峡市| 五常市| 汝南县| 隆昌县| 丰镇市| 望城县| 封开县| 大埔县| 炎陵县|