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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java io--内存操作流_JavaIO——内存操作流、打印流

發布時間:2025/3/20 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java io--内存操作流_JavaIO——内存操作流、打印流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們之前所做的都是對文件進行IO處理,實則我們也可以對內存進行IO處理。我們將發生在內存中的IO處理稱為內存流。

內存操作流也可分為兩類:字節內存流和字符內存流。

(1)ByteArrayInputStream ?和 ?ByteArrayOutputStream

構造函數:

publicclassByteArrayOutputStreamextendsOutputStream

publicclassByteArrayInputStreamextendsInputStream

(2)CharArrayInputStream ?和 ?CharArrayOutputStream

構造函數:

publicclassCharArrayWriterextendsWriter

publicclassCharArrayReaderextendsReader

由此我們可以得出內存流的繼承關系:

利用內存流實現大小寫轉換:package myIO;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

/*通過內存流實現大小寫轉換

* */

public class Test3{

public static void main(String[] args) throws IOException{

String string = "hello world,hello lemon";

//實例化InputStream對象,進行實例化時應將需要操作的數據保存在內存中,讀取的將是設置的內容

InputStream inputStream = new ByteArrayInputStream(string.getBytes());

//實例化OutputStream對象

OutputStream outputStream = new ByteArrayOutputStream();

int temp= 0;

//判斷是否讀完

while((temp = inputStream.read())!=-1) {

//對每個字節進行處理,處理之后存在于OutputStream類中

//進行大小寫轉換

outputStream.write(Character.toUpperCase(temp));

}

//直接對outputStream對象進行輸出

System.out.println(outputStream);

//關閉流

inputStream.close();

outputStream.close();

}

}

(2)內存流的操作

內存流有個很小的功能就是實現兩個文件的合并操作(對很小的文件而言)。

內存流最核心的就是:將所有OutputStream輸出的程序保存在了程序中,所以可以利用這一特征來進行處理。/*

* 實現兩個文件的合并處理

* */

public class Test3{

public static void main(String[] args) throws IOException{

String singal = File.separator;

//指明要合并兩個文件的地址

File[] files = new File[] {

new File("C:"+singal+"Users"+singal+"lenovo"+singal+"Desktop"+singal+"Test1.txt")

,new File("C:"+singal+"Users"+singal+"lenovo"+singal+"Desktop"+singal+"Test2.txt")};

String[] data = new String[2];

for(int i = 0 ;i

data[i] = readFile(files[i]);

}

StringBuffer stringBuffer = new StringBuffer();

String contentA [] = data[0].split(" ") ;

String contentB [] = data[1].split(" ") ;

for (int i = 0; i < contentA.length ; i++) {

stringBuffer.append(contentA[i]).append("(").append(contentB[i]).append(")").append(" ") ;

}

System.out.println(stringBuffer);

}

//讀取文件內容,使用File對象因為其包含完整的路徑信息

public static String readFile(File file) throws IOException{

if(file.exists()) {

InputStream inputStream = new FileInputStream(file);

//沒有向上轉型,因為后續要使用toByteArray()方法

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

int temp = 0;

byte[] data = new byte[10];

while((temp = inputStream.read(data))!=-1) {

//將數據保存在byteArrayOutputStream

byteArrayOutputStream.write(data,0,temp);

}

byteArrayOutputStream.close();

inputStream.close();

return new String(byteArrayOutputStream.toByteArray());

}

return null;

}

}

2、打印流

打印流的本質是解決OutputStream的缺陷,因為若想將非二進制的數據通過程序向終端目標直接輸出信息的話,OutputStream有如下缺陷:所有的數據都要轉換成字節數組,若要輸出int、double更是不方便。

(1)進行簡單打印流的設計/*

* 設計簡單打印流

* */

class PrintDesign{

private OutputStream outputStream;

//構造函數

//有外部傳入要輸出的目的終端

public PrintDesign(OutputStream outputStream){

super();

this.outputStream = outputStream;

}

//實現輸出的功能(傳入參數為字符串)

public void print(String string) throws IOException{

this.outputStream.write(string.getBytes());

}

//實現換行功能

public void println(String string) throws IOException{

this.print(string+"\r\n");

}

//傳入參數為int

public void print(int data) throws IOException{

this.print(String.valueOf(data));

}

public void println(int data) throws IOException{

this.print(String.valueOf(data)+"\r\n");

}

}

public class Test3{

public static void main(String[] args) throws IOException{

String singal = File.separator;

PrintDesign printDesign = new PrintDesign(new FileOutputStream(

new File("C:"+singal+"Users"+singal+"lenovo"+singal+"Desktop"+singal+"Test1.txt")));

printDesign.println("姓名:");

printDesign.print("lemon");

printDesign.println("年齡:");

printDesign.print(20);

}

}

我們可以發現經過簡單的處理使得OutputStream的功能變得更加強大了,其實我們所做的工作只不過是對OutputStream做了一個封裝而已。實則java中提供有專門的打印流處理類:字節打印流rintStream、字符打印流PrintWriter.

(2)認識打印流處理類

字節打印流:publicclassPrintStreamextendsFilterOutputStream

構造函數:publicPrintStream(OutputStreamout)

字符打印流:publicclassPrintWriterextendsWriter

構造函數:publicPrintWriter(OutputStreamout)

publicPrintWriter(Writerout)

打印流的設計模式屬于裝飾者設計模式:核心是某個類的功能,但是為了得到更好的操作效果,讓其支持的功能更多一些。

(3)打印流的使用

在后續的應用中字符打印流(PrintWriter)引用比較對,因為它可以接收Writer和OutputStream兩種類型的參數;而字節打印流(PrintStream)只可接收OutputStream類型的參數。/*

* 字符打印流的使用

* */

public class Test3{

public static void main(String[] args) throws FileNotFoundException{

String singal = File.separator;

PrintWriter printWriter = new PrintWriter(

new File("C:"+singal+"Users"+singal+"lenovo"+singal+"Desktop"+singal+"Test1.txt"));

printWriter.print("班級:");

printWriter.println("數學152");

printWriter.println("年齡:");

printWriter.println(20);

printWriter.close();

}

}

(4)格式化輸出

我們在C語言遇到一個printf()函數,這個函數在輸出的時候可以使用一些占位符,例如:字符串(%s)、數字(%d)、小數(%f)、字符(%c)等。從JDK1.5開始,PrintStream類中也追加了此種操作。

格式化輸出:publicPrintStream printf(Stringformat, Object ...args)/*

* 格式化輸出

* */

public class Test3{

public static void main(String[] args) throws FileNotFoundException{

String name = "lemon";

int age = 20;

double salary = 10.3;

String singal = File.separator;

PrintStream printStream = new PrintStream(new FileOutputStream(

new File("C:"+singal+"Users"+singal+"lenovo"+singal+"Desktop"+singal+"Test2.txt")));

printStream.printf("姓名:%s,年齡:%d,工資:%f",name,age,salary);

printStream.close();

}

}

總結

以上是生活随笔為你收集整理的java io--内存操作流_JavaIO——内存操作流、打印流的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。