小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

4hutool實(shí)戰(zhàn):IoUtil 流操作工具類(toStream轉(zhuǎn)為流)

 小虛竹 2021-11-30
技術(shù)活,該賞
關(guān)注+一鍵三連(點(diǎn)贊,評(píng)論,收藏)再看,養(yǎng)成好習(xí)慣

hutool實(shí)戰(zhàn)(帶你掌握里面的各種工具)目錄


用途:IO工具類(toStream轉(zhuǎn)為流)

使用場(chǎng)景

IO工具類只是輔助流的讀寫,并不負(fù)責(zé)關(guān)閉流。原因是流可能被多次讀寫,讀寫關(guān)閉后容易造成問題。

(String 轉(zhuǎn)為流)

(文件轉(zhuǎn)為流)

(byte[]轉(zhuǎn)為流)

(不同類型的流互轉(zhuǎn))

項(xiàng)目引用

此博文的依據(jù):hutool-5.6.5版本源碼

        <dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.6.5</version>
</dependency>

方法摘要

方法描述
String 轉(zhuǎn)為流
String 轉(zhuǎn)為流
String 轉(zhuǎn)為UTF-8編碼的字節(jié)流流
文件轉(zhuǎn)為{@link FileInputStream}
byte[] 轉(zhuǎn)為{@link ByteArrayInputStream}
{@link ByteArrayOutputStream}轉(zhuǎn)為{@link ByteArrayInputStream}
轉(zhuǎn)換為{@link BufferedInputStream}
轉(zhuǎn)換為{@link BufferedInputStream}
轉(zhuǎn)換為{@link BufferedOutputStream}
轉(zhuǎn)換為{@link BufferedOutputStream}
轉(zhuǎn)換為{@link BufferedReader}
轉(zhuǎn)換為{@link BufferedReader}
轉(zhuǎn)換為{@link BufferedWriter}
轉(zhuǎn)換為{@link BufferedWriter}
將{@link InputStream}轉(zhuǎn)換為支持mark標(biāo)記的流<br> 若原流支持mark標(biāo)記,則返回原流,否則使用{@link BufferedInputStream} 包裝之
轉(zhuǎn)換為{@link PushbackInputStream}<br> 如果傳入的輸入流已經(jīng)是{@link PushbackInputStream},強(qiáng)轉(zhuǎn)返回,否則新建一個(gè)
將指定{@link InputStream} 轉(zhuǎn)換為{@link InputStream#available()}方法可用的流。
在Socket通信流中,服務(wù)端未返回?cái)?shù)據(jù)情況下{@link InputStream#available()}方法始終為{@code 0}
因此,在讀取前需要調(diào)用{@link InputStream#read()}讀取一個(gè)字節(jié)(未返回會(huì)阻塞),一旦讀取到了,{@link InputStream#available()}方法就正常了。
需要注意的是,在網(wǎng)絡(luò)流中,是按照塊來(lái)傳輸?shù)?#xff0c;所以 {@link InputStream#available()} 讀取到的并非最終長(zhǎng)度,而是此次塊的長(zhǎng)度。
此方法返回對(duì)象的規(guī)則為:
  • FileInputStream 返回原對(duì)象,因?yàn)槲募鞯腶vailable方法本身可用
  • 其它InputStream 返回PushbackInputStream

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toStream(java.lang.String, java.lang.String)

方法描述

String 轉(zhuǎn)為流

支持版本及以上

參數(shù)描述:

參數(shù)名描述
String content
content 內(nèi)容
String charsetName
charsetName 編碼

返回值:

字節(jié)流

參考案例:

//內(nèi)存讀寫流 不用回收關(guān)閉
ByteArrayInputStream byteArrayInputStream = IoUtil.toStream("1hello 小虛竹\n2hello 小虛竹","UTF-8");
String str = IoUtil.read(byteArrayInputStream,"UTF-8");
System.out.println(str);

在這里插入圖片描述

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toStream(java.lang.String, java.nio.charset.Charset)

方法描述

String 轉(zhuǎn)為流

支持版本及以上

參數(shù)描述:

參數(shù)名描述
String content
content 內(nèi)容
Charset charset
charset 編碼

返回值:

字節(jié)流

參考案例:

//內(nèi)存讀寫流 不用回收關(guān)閉
ByteArrayInputStream byteArrayInputStream = IoUtil.toStream("1hello 小虛竹\n2hello 小虛竹","UTF-8");
String str = IoUtil.read(byteArrayInputStream,CharsetUtil.UTF_8);
System.out.println(str);

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toUtf8Stream(java.lang.String)

方法描述

String 轉(zhuǎn)為UTF-8編碼的字節(jié)流流

支持版本及以上

4.5.1

參數(shù)描述:

參數(shù)名描述
String content
content 內(nèi)容

返回值:

字節(jié)流

參考案例:

//內(nèi)存讀寫流 不用回收關(guān)閉
ByteArrayInputStream byteArrayInputStream = IoUtil.toUtf8Stream("1hello 小虛竹\n2hello 小虛竹");
String str = IoUtil.read(byteArrayInputStream,CharsetUtil.UTF_8);
System.out.println(str);

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toStream(java.io.File)

方法描述

文件轉(zhuǎn)為{@link FileInputStream}

支持版本及以上

參數(shù)描述:

參數(shù)名描述
File file
file 文件

返回值:

{@link FileInputStream}

參考案例:

File src = new File("C:\\Users\\Administrator\\Desktop\\xuzhu/toStreamTest4.txt") ;
FileInputStream fileInputStream =  null;
try {
//創(chuàng)建流
fileInputStream = IoUtil.toStream(src);
String str = IoUtil.read(fileInputStream,CharsetUtil.UTF_8);
System.out.println(str);
} catch (Exception e) {
//拋出一個(gè)運(yùn)行時(shí)異常(直接停止掉程序)
throw new RuntimeException("運(yùn)行時(shí)異常",e);
} finally {
try {
//如果是空的 說明流創(chuàng)建失敗 失敗了不需要關(guān)閉
if (fileInputStream != null) {
fileInputStream.close();
}
} catch (Exception e) {
//關(guān)閉資源失敗 停止程序
throw new RuntimeException("關(guān)閉資源失敗");
}
}

在這里插入圖片描述

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toStream(byte[])

方法描述

byte[] 轉(zhuǎn)為{@link ByteArrayInputStream}

支持版本及以上

4.1.8

參數(shù)描述:

參數(shù)名描述
byte[] content
content 內(nèi)容bytes

返回值:

字節(jié)流

參考案例:

String str = "1hello 小虛竹\n2hello 小虛竹";
byte[] sb = str.getBytes();
//內(nèi)存讀寫流 不用回收關(guān)閉
ByteArrayInputStream byteArrayInputStream = IoUtil.toStream(sb);
String str1 = IoUtil.read(byteArrayInputStream,CharsetUtil.UTF_8);
System.out.println(str1);

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toStream(java.io.ByteArrayOutputStream)

方法描述

{@link ByteArrayOutputStream}轉(zhuǎn)為{@link ByteArrayInputStream}

支持版本及以上

5.3.6

參數(shù)描述:

參數(shù)名描述
ByteArrayOutputStream out
out {@link ByteArrayOutputStream}

返回值:

字節(jié)流

參考案例:

try {
內(nèi)存讀寫流 不用回收關(guān)閉
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
String str = "1hello 小虛竹\n2hello 小虛竹";
byte[] sb = str.getBytes();
byteArrayOutputStream.write(sb);
ByteArrayInputStream byteArrayInputStream = IoUtil.toStream(byteArrayOutputStream);
String str1 = IoUtil.read(byteArrayInputStream,CharsetUtil.UTF_8);
System.out.println(str1);
} catch (IOException e) {
//拋出一個(gè)運(yùn)行時(shí)異常(直接停止掉程序)
throw new RuntimeException("運(yùn)行時(shí)異常",e);
}

在這里插入圖片描述

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toBuffered(java.io.InputStream)

方法描述

轉(zhuǎn)換為{@link BufferedInputStream}

支持版本及以上

4.0.10

參數(shù)描述:

參數(shù)名描述
InputStream in
in {@link InputStream}

返回值:

{@link BufferedInputStream}

參考案例:

File src = new File("C:\\Users\\Administrator\\Desktop\\xuzhu/toBufferedTest1.txt") ;
FileInputStream fileInputStream =  null;
BufferedInputStream bufferedInputStream = null;
try {
fileInputStream = new FileInputStream(src);
bufferedInputStream = IoUtil.toBuffered(fileInputStream);
String str = IoUtil.read(bufferedInputStream,"UTF-8");
System.out.println(str);
} catch (IOException e) {
//拋出一個(gè)運(yùn)行時(shí)異常(直接停止掉程序)
throw new RuntimeException("運(yùn)行時(shí)異常",e);
}finally {
IoUtil.close(fileInputStream);
IoUtil.close(bufferedInputStream);
}

在這里插入圖片描述

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toBuffered(java.io.InputStream, int)

方法描述

轉(zhuǎn)換為{@link BufferedInputStream}

支持版本及以上

5.6.1

參數(shù)描述:

參數(shù)名描述
InputStream in
in {@link InputStream}
int bufferSize
bufferSize buffer size

返回值:

{@link BufferedInputStream}

參考案例:

File src = new File("C:\\Users\\Administrator\\Desktop\\xuzhu/toBufferedTest1.txt") ;
FileInputStream fileInputStream =  null;
BufferedInputStream bufferedInputStream = null;
try {
fileInputStream = new FileInputStream(src);
bufferedInputStream = IoUtil.toBuffered(fileInputStream,8192);
String str = IoUtil.read(bufferedInputStream,"UTF-8");
System.out.println(str);
} catch (IOException e) {
//拋出一個(gè)運(yùn)行時(shí)異常(直接停止掉程序)
throw new RuntimeException("運(yùn)行時(shí)異常",e);
}finally {
IoUtil.close(fileInputStream);
IoUtil.close(bufferedInputStream);
}

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toBuffered(java.io.OutputStream)

方法描述

轉(zhuǎn)換為{@link BufferedOutputStream}

支持版本及以上

4.0.10

參數(shù)描述:

參數(shù)名描述
OutputStream out
out {@link OutputStream}

返回值:

{@link BufferedOutputStream}

參考案例:

File src = new File("C:\\Users\\Administrator\\Desktop\\xuzhu/toBufferedTest3.txt") ;
OutputStream outputStream =  null;
BufferedOutputStream bufferedOutputStream = null;
try {
//創(chuàng)建流
outputStream = new FileOutputStream(src);
bufferedOutputStream = IoUtil.toBuffered(outputStream);
String str = "toBufferedTest3內(nèi)容1 \ntoBufferedTest3內(nèi)容2";
byte[] sb = str.getBytes();
bufferedOutputStream.write(sb);
bufferedOutputStream.flush();
} catch (IOException e) {
//拋出一個(gè)運(yùn)行時(shí)異常(直接停止掉程序)
throw new RuntimeException("運(yùn)行時(shí)異常",e);
}finally {
IoUtil.close(outputStream);
IoUtil.close(bufferedOutputStream);
}

在這里插入圖片描述

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toBuffered(java.io.OutputStream, int)

方法描述

轉(zhuǎn)換為{@link BufferedOutputStream}

支持版本及以上

5.6.1

參數(shù)描述:

參數(shù)名描述
OutputStream out
out {@link OutputStream}
int bufferSize
bufferSize buffer size

返回值:

{@link BufferedOutputStream}

參考案例:

File src = new File("C:\\Users\\Administrator\\Desktop\\xuzhu/toBufferedTest3.txt") ;
OutputStream outputStream =  null;
BufferedOutputStream bufferedOutputStream = null;
try {
//創(chuàng)建流
outputStream = new FileOutputStream(src);
bufferedOutputStream = IoUtil.toBuffered(outputStream,8192);
String str = "toBufferedTest3內(nèi)容1 \ntoBufferedTest3內(nèi)容2";
byte[] sb = str.getBytes();
bufferedOutputStream.write(sb);
bufferedOutputStream.flush();
} catch (IOException e) {
//拋出一個(gè)運(yùn)行時(shí)異常(直接停止掉程序)
throw new RuntimeException("運(yùn)行時(shí)異常",e);
}finally {
IoUtil.close(outputStream);
IoUtil.close(bufferedOutputStream);
}

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toBuffered(java.io.Reader)

方法描述

轉(zhuǎn)換為{@link BufferedReader}

支持版本及以上

5.6.1

參數(shù)描述:

參數(shù)名描述
Reader reader
reader {@link Reader}

返回值:

{@link BufferedReader}

參考案例:

Reader reader =  null;
BufferedReader bufferedReader = null;
try {
reader = new StringReader("1hello 小虛竹\n2hello 小虛竹");
bufferedReader = IoUtil.toBuffered(reader);
//讀第一行數(shù)據(jù)
String str = "";
while (str != null){
str = bufferedReader.readLine();
if(str !=null){
System.out.println(str);
}
}
} catch (IOException e) {
//拋出一個(gè)運(yùn)行時(shí)異常(直接停止掉程序)
throw new RuntimeException("運(yùn)行時(shí)異常",e);
}finally {
IoUtil.close(reader);
IoUtil.close(bufferedReader);
}

在這里插入圖片描述

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toBuffered(java.io.Reader, int)

方法描述

轉(zhuǎn)換為{@link BufferedReader}

支持版本及以上

5.6.1

參數(shù)描述:

參數(shù)名描述
Reader reader
reader {@link Reader}
int bufferSize
bufferSize buffer size

返回值:

{@link BufferedReader}

參考案例:

Reader reader =  null;
BufferedReader bufferedReader = null;
try {
reader = new StringReader("1hello 小虛竹\n2hello 小虛竹");
bufferedReader = IoUtil.toBuffered(reader,8192);
//讀第一行數(shù)據(jù)
String str = "";
while (str != null){
str = bufferedReader.readLine();
if(str !=null){
System.out.println(str);
}
}
} catch (IOException e) {
//拋出一個(gè)運(yùn)行時(shí)異常(直接停止掉程序)
throw new RuntimeException("運(yùn)行時(shí)異常",e);
}finally {
IoUtil.close(reader);
IoUtil.close(bufferedReader);
}

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toBuffered(java.io.Writer)

方法描述

轉(zhuǎn)換為{@link BufferedWriter}

支持版本及以上

5.6.1

參數(shù)描述:

參數(shù)名描述
Writer writer
writer {@link Writer}

返回值:

{@link BufferedWriter}

參考案例:

File dest = new File("C:\\Users\\Administrator\\Desktop\\xuzhu/toBufferedTest7.txt") ;
FileWriter fw = null;
BufferedWriter bufferedWriter = null;
try {
//創(chuàng)建流
fw = new FileWriter(dest);
bufferedWriter = IoUtil.toBuffered(fw);
String str = "toBufferedTest7 \ntoBufferedTest7";
bufferedWriter.write(str);
bufferedWriter.flush();
} catch (IOException e) {
//拋出一個(gè)運(yùn)行時(shí)異常(直接停止掉程序)
throw new RuntimeException("運(yùn)行時(shí)異常",e);
}finally {
IoUtil.close(fw);
IoUtil.close(bufferedWriter);
}

在這里插入圖片描述

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toBuffered(java.io.Writer, int)

方法描述

轉(zhuǎn)換為{@link BufferedWriter}

支持版本及以上

5.6.1

參數(shù)描述:

參數(shù)名描述
Writer writer
writer {@link Writer}
int bufferSize
bufferSize buffer size

返回值:

{@link BufferedWriter}

參考案例:


File dest = new File("C:\\Users\\Administrator\\Desktop\\xuzhu/toBufferedTest7.txt") ;
FileWriter fw = null;
BufferedWriter bufferedWriter = null;
try {
//創(chuàng)建流
fw = new FileWriter(dest);
bufferedWriter = IoUtil.toBuffered(fw,8192);
String str = "toBufferedTest7 \ntoBufferedTest7";
bufferedWriter.write(str);
bufferedWriter.flush();
} catch (IOException e) {
//拋出一個(gè)運(yùn)行時(shí)異常(直接停止掉程序)
throw new RuntimeException("運(yùn)行時(shí)異常",e);
}finally {
IoUtil.close(fw);
IoUtil.close(bufferedWriter);
}

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toMarkSupportStream(java.io.InputStream)

方法描述

將{@link InputStream}轉(zhuǎn)換為支持mark標(biāo)記的流<br>
若原流支持mark標(biāo)記,則返回原流,否則使用{@link BufferedInputStream} 包裝之

支持版本及以上

4.0.9

參數(shù)描述:

參數(shù)名描述
InputStream in
in 流

返回值:

{@link InputStream}

參考案例:

File src = new File("C:\\Users\\Administrator\\Desktop\\xuzhu/toMarkSupportStreamTest1.txt") ;
FileInputStream input = null;
InputStream inputStream = null;
try {
//創(chuàng)建流
input =  new FileInputStream(src);
inputStream = IoUtil.toMarkSupportStream(input);
inputStream.mark(10);
int c = 0;
int index = 0;
//避免陷入死循環(huán)
int breakRead = 0;
StringBuilder stringBuilder = new StringBuilder();
while ((c = inputStream.read()) != -1 && breakRead<2){
index++;
stringBuilder.append((char) c);
if(index>7){
index=0;
breakRead++;
//支持mark標(biāo)記,則返回原流
inputStream.reset();
}
}
System.out.println(stringBuilder.toString());
} catch (IOException e) {
//拋出一個(gè)運(yùn)行時(shí)異常(直接停止掉程序)
throw new RuntimeException("運(yùn)行時(shí)異常",e);
}finally {
IoUtil.close(inputStream);
IoUtil.close(input);
}

在這里插入圖片描述

在這里插入圖片描述

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toPushbackStream(java.io.InputStream, int)

方法描述

轉(zhuǎn)換為{@link PushbackInputStream}<br>
如果傳入的輸入流已經(jīng)是{@link PushbackInputStream},強(qiáng)轉(zhuǎn)返回,否則新建一個(gè)

支持版本及以上

3.1.0

參數(shù)描述:

參數(shù)名描述
InputStream in
in {@link InputStream}
int pushBackSize
pushBackSize 推后的byte數(shù)

返回值:

{@link PushbackInputStream}

參考案例:

File src = new File("C:\\Users\\Administrator\\Desktop\\xuzhu/toPushbackStreamTest.txt") ;
FileInputStream input = null;
PushbackInputStream pushbackInputStream = null;
try {
//創(chuàng)建流
input =  new FileInputStream(src);
//在輸入流中某個(gè)不需要的內(nèi)容,可以通過pushbackInputStream(回退輸入流)處理掉
pushbackInputStream = IoUtil.toPushbackStream(input,1);
System.out.print("讀取之后的數(shù)據(jù)為:") ;
int temp = 0 ;
while((temp=pushbackInputStream.read())!=-1) {    // 讀取內(nèi)容
if (temp == 'P') {    // 判斷是否讀取到了“.”
pushbackInputStream.unread(temp);    // 放回到緩沖區(qū)之中
temp = pushbackInputStream.read();    // 再讀一遍
System.out.print("(退回" + (char) temp + ")");
} else {
System.out.print((char) temp);    // 輸出內(nèi)容
}
}
} catch (IOException e) {
//拋出一個(gè)運(yùn)行時(shí)異常(直接停止掉程序)
throw new RuntimeException("運(yùn)行時(shí)異常",e);
}finally {
IoUtil.close(pushbackInputStream);
IoUtil.close(input);
}

在這里插入圖片描述

在這里插入圖片描述

源碼解析:

鏈接:待補(bǔ)充

方法明細(xì)

方法名稱:cn.hutool.core.io.IoUtil.toAvailableStream(java.io.InputStream)

方法描述

將指定{@link InputStream} 轉(zhuǎn)換為{@link InputStream#available()}方法可用的流。

在Socket通信流中,服務(wù)端未返回?cái)?shù)據(jù)情況下{@link InputStream#available()}方法始終為{@code 0}

因此,在讀取前需要調(diào)用{@link InputStream#read()}讀取一個(gè)字節(jié)(未返回會(huì)阻塞),一旦讀取到了,{@link InputStream#available()}方法就正常了。

需要注意的是,在網(wǎng)絡(luò)流中,是按照塊來(lái)傳輸?shù)?#xff0c;所以 {@link InputStream#available()} 讀取到的并非最終長(zhǎng)度,而是此次塊的長(zhǎng)度。

此方法返回對(duì)象的規(guī)則為:

  • FileInputStream 返回原對(duì)象,因?yàn)槲募鞯腶vailable方法本身可用
  • 其它InputStream 返回PushbackInputStream

支持版本及以上

5.5.3

參數(shù)描述:

參數(shù)名描述
InputStream in
in 被轉(zhuǎn)換的流

返回值:

轉(zhuǎn)換后的流,可能為{@link PushbackInputStream}

參考案例:

File src = new File("C:\\Users\\Administrator\\Desktop\\xuzhu/toAvailableStreamTest.txt") ;
FileInputStream fileInputStream = null;
InputStream inputStream = null;
BufferedInputStream bufferedInputStream = null;
try {
//創(chuàng)建流
fileInputStream =  new FileInputStream(src);
//返回原對(duì)象 FileInputStream
inputStream = IoUtil.toAvailableStream(fileInputStream);

int c = 0;
StringBuilder stringBuilder = new StringBuilder();
while ((c = inputStream.read())!= -1){
stringBuilder.append((char) c);
}
System.out.println(stringBuilder.toString());
System.out.print("----------------------------") ;

fileInputStream = new FileInputStream(src);
//其它InputStream 返回PushbackInputStream
bufferedInputStream = IoUtil.toBuffered(fileInputStream);
inputStream = IoUtil.toAvailableStream(bufferedInputStream);
int temp = 0;
while ((temp=((PushbackInputStream)inputStream).read())!=-1){
if (temp == 'A') {    // 判斷是否讀取到了“.”
((PushbackInputStream)inputStream).unread(temp);    // 放回到緩沖區(qū)之中
temp = inputStream.read();    // 再讀一遍
System.out.print("(退回" + (char) temp + ")");
} else {
System.out.print((char) temp);    // 輸出內(nèi)容
}
}
} catch (IOException e) {
//拋出一個(gè)運(yùn)行時(shí)異常(直接停止掉程序)
throw new RuntimeException("運(yùn)行時(shí)異常",e);
}finally {
IoUtil.close(fileInputStream);
IoUtil.close(inputStream);
IoUtil.close(bufferedInputStream);

}

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

源碼解析:

鏈接:待補(bǔ)充

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多