日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文件与IO流

發(fā)布時間:2024/9/30 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件与IO流 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 流的分類
    • 字節(jié)流和字符流
      • 輸入流InputStream和Reader
    • RandomAccessFile
    • InputStream 2 String(將字節(jié)輸入流中的數(shù)據(jù)存到字符串中)

流的分類

按流的的方向來分(程序運行的內(nèi)存為參照):

  • 輸入流:只能從中讀取數(shù)據(jù),不能向其寫數(shù)據(jù) 。由InputStream和Reader作為基類。
  • 輸出流:只能往里面寫數(shù)據(jù),不能讀取數(shù)據(jù)。由OutputStream和Writer作為基類。

按操作的數(shù)據(jù)單元來分:

  • 字節(jié)流:操作的最小數(shù)據(jù)單元是8位的字節(jié)。由InputStream和OutputStream作為基類。
  • 字符流:操作的最小數(shù)據(jù)單元是16位的字符。由Reader和Writer作為基類。
字節(jié)流字符流
輸入流InputStreamReader
輸出流OutputStreamWriter

按流的角色分:

  • 節(jié)點流:可以從/向一個特定的IO設(shè)備(如磁盤,網(wǎng)絡(luò))讀/寫數(shù)據(jù)的流。
  • 處理流:對一個已經(jīng)存在的流進行連接或封裝,通過封裝后的流來實現(xiàn)數(shù)據(jù)的讀寫功能。

現(xiàn)階段我一般用的是節(jié)點流,處理流還不會。

字節(jié)流和字符流

輸入流InputStream和Reader

InputStream和Reader都是抽象類,故不能創(chuàng)建實例來執(zhí)行輸入操作。但是它們是輸入流的基類,它們的方法是所有輸入流都可以使用的方法。
InputStream類的方法

int read():從輸入流中讀取單個字節(jié),返回所讀取的數(shù)據(jù)(字節(jié)數(shù)據(jù)可以直接轉(zhuǎn)換成int類型)。 int read(byte[] b):從輸入流中讀取最多b.lenth長度的字節(jié),并將其存放在字節(jié)數(shù)組b中,返回讀取的字節(jié)數(shù)。 //從輸入流中讀取最多l(xiāng)en長度的字節(jié),存放在字節(jié)數(shù)組b中(在off位置開始存放),返回實際讀取的字節(jié)數(shù) int read(byte[] b,int off,int len)

Reader類的方法

int read():從輸入流中讀取單個字符,返回所讀取的數(shù)據(jù)(字節(jié)數(shù)據(jù)可以直接轉(zhuǎn)換成int類型)。 //從輸入流中讀取最多b.lenth長度的字符,并將其存放在字節(jié)數(shù)組b中,返回讀取的字節(jié)數(shù)。 int read(char[] cbuf) //從輸入流中讀取最多l(xiāng)en長度的字符,存放在字節(jié)數(shù)組b中(在off位置開始存放),返回實際讀取的字節(jié)數(shù) int read(char[] cbuf,int off,int len)

不管是字節(jié)流還是字符流,上面的方法都是可以重復使用的。每次調(diào)用后,輸入流的指針都會向后移動讀取的字節(jié)/字符個數(shù)的位。當read方法放回-1時,表示該輸入流已經(jīng)被讀完了。

package com.test2;import java.io.FileInputStream; import java.io.IOException;public class FileInputStreamTest {public static void main(String[] args){FileInputStream fis = null;byte[] buf = new byte[64];System.out.println("開始讀取數(shù)據(jù)");try {//使用絕對路徑來定位指定文件,由于\代表是轉(zhuǎn)義字符,故需要\\作為目錄分隔符fis = new FileInputStream("G:\\03 code\\Java\\15\\src\\com\\test2\\FileInputStreamTest.java");//fis = new FileInputStream("FileInputStreamTest.java");int hasRead = 0;while ((hasRead=fis.read(buf)) > 0){System.out.println("輸入流讀取的數(shù)據(jù)是:");//使用平臺默認的字符集,將字節(jié)數(shù)組buf的第0位,長度hasRead的子數(shù)組解碼成一個新的String對象System.out.printf(new String(buf,0,hasRead));}fis.close();}catch (IOException e){e.printStackTrace();}} }

輸入流移動指針的方法

void mark(int readAheadLimit):在指針當前位置記錄一個標記 boolean markSupported(): 判斷此輸入流是否支持mark操作 void reset(): 將指針重新定位到上一級標記處 long skip(long n): 指針向前移動n個字節(jié)/字符

RandomAccessFile

與普通的輸入輸出流不同。

  • 它既可以向文件讀入內(nèi)容,也可以向文件寫入數(shù)據(jù)。
  • 支持直接跳轉(zhuǎn)到文件的任意位置來讀寫數(shù)據(jù)。
  • InputStream 2 String(將字節(jié)輸入流中的數(shù)據(jù)存到字符串中)

  • 循環(huán)將字節(jié)輸入流讀取到字節(jié)數(shù)組中,再將字節(jié)數(shù)組中寫道字節(jié)輸出流(ByteArrayOutputStream)
  • 字節(jié)輸出流以字節(jié)數(shù)組讀出,然后存在字符串中
  • InputStream in = request.getInputStream();//在request中獲取字節(jié)輸入流 //字節(jié)輸出流、其中數(shù)據(jù)被寫入到字節(jié)數(shù)組中, 緩沖區(qū)在數(shù)據(jù)寫入時會自動增長 ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] data = new byte[4096]; //字節(jié)數(shù)組,暫存輸入流數(shù)據(jù) int count = -1; while ((count = in.read(data,0,4096))!= -1)//每次讀取InpuStream中的數(shù)據(jù)到data中out.write(data,0,count); //將字節(jié)數(shù)組中的數(shù)據(jù)寫到字節(jié)輸出流 String param = new String(out.toByteArray(),"UTF-8");//使用指定字符集將字節(jié)數(shù)組解碼成一個新的String對象 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的文件与IO流的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。