91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深入淺析Java中IO流的字節流

發布時間:2020-11-19 16:07:50 來源:億速云 閱讀:122 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關深入淺析Java中IO流的字節流,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Java中IO流 字節流實例詳解

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

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

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

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

字節流

  1.InputStream、OutputStream

  InputStream抽象了應用程序讀取數據的方式

  OutputStream抽象了應用程序寫出數據的方式

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

  3.輸入流基本方法

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

  int.read(byte[] buf)讀取數據填充到字節數組buf

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

  4.輸出流基本方法

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

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

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

  5.FileInputStream是InputStream的子類,具體實現了在文件上讀取數據

    6.FileOutputStream是OutputStream的子類,實現了向文件中寫出字節數據的方法

  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 {
  /**
   * 讀取指定文件內容,按照十六進制輸出到控制臺
   * 并且每輸出10個byte換行
   * @param fileName
   * @throws IOException
   */
  public static void printHex(String fileName) throws IOException {
    //把文件作為字節流進行讀操作
    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];
    
    //如果字節數組夠大,可以一次性讀完
    //從in中批量讀取字節,放入到buf這個字節數組中,從第0個位置開始放,最多放buf.length個,返回的是讀到的字節的個數
    /* 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++;
    } */
    
    //如果字節數組不夠大,不能一次性讀完
    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 {
    //如果該文件不存在,則直接創建,如果存在,刪除后創建。(如果第二個參數為 true,則將字節寫入文件末尾處,而不是寫入文件開始處。)
    FileOutputStream out = new FileOutputStream("F:\\javaio\\out.dat");
    out.write('A');//寫入了‘A'的低八位(一次只寫入一個字節)
    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,字符等類型數據。

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兩個字節是“你好”這兩個中文的字節個數。

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提供了帶緩沖區的操作,一般打開文件進行寫入或讀取操作時,都會加上緩沖,這種流模式提高了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 {/**
   * 拷貝文件,字節批量讀取
   * @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();//最好加上,刷新此輸出流并強制寫出所有緩沖的輸出字節。
    }
    in.close();
    out.close();
  }
  /**
   * 拷貝文件,利用帶緩沖的字節流
   * @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();
  }
  /**
   * 拷貝文件,通過單字節讀取
   * @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();
    }
  }
}

上述就是小編為大家分享的深入淺析Java中IO流的字節流了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥棱县| 青浦区| 枣阳市| 漳浦县| 宿松县| 松阳县| 青田县| 玉门市| 新营市| 沅陵县| 杭锦旗| 丰原市| 松滋市| 兴安盟| 汶川县| 常州市| 英德市| 沁源县| 乐平市| 拉萨市| 车致| 福清市| 富民县| 阿城市| 汉川市| 石棉县| 吉木乃县| 泗阳县| 大安市| 禹州市| 平顶山市| 冷水江市| 莱芜市| 奉新县| 大港区| 邯郸市| 保山市| 青阳县| 深水埗区| 嘉鱼县| 浑源县|