欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java IO流 文件傳輸基礎(chǔ)

 更新時(shí)間:2016年07月11日 11:45:11   作者:萌小Q  
這篇文章主要介紹了Java IO流 文件傳輸基礎(chǔ)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

一、文件的編碼

package com.study.io;
/**
* 測(cè)試文件編碼
*/
public class EncodeDemo {
/**
* @param args
* @throws Exception 
*/
public static void main(String[] args) throws Exception {
String s="好好學(xué)習(xí)ABC";
byte[] bytes1=s.getBytes();//這是把字符串轉(zhuǎn)換成字符數(shù)組,轉(zhuǎn)換成的字節(jié)序列用的是項(xiàng)目默認(rèn)的編碼(這里為UTF-8)
for (byte b : bytes1) {
//把字節(jié)(轉(zhuǎn)換成了int)以16進(jìn)制的方式顯示
System.out.print(Integer.toHexString(b & 0xff)+" ");//& 0xff是為了把前面的24個(gè)0去掉只留下后八位
}
System.out.println();
/*utf-8編碼中中文占用3個(gè)字節(jié),英文占用1個(gè)字節(jié)*/
byte[] bytes2 = s.getBytes("utf-8");//這里會(huì)有異常展示,我們就throw這個(gè)異常
for (byte b : bytes2) {
System.out.print(Integer.toHexString(b & 0xff)+" ");
}
System.out.println();
/*gbk編碼中文占用2個(gè)字節(jié),英文占用1個(gè)字節(jié)*/
byte[] bytes3 = s.getBytes("gbk");//這里會(huì)有異常展示,我們就throw這個(gè)異常
for (byte b : bytes3) {
System.out.print(Integer.toHexString(b & 0xff)+" ");
}
System.out.println();
/*utf-16be編碼中文占用2個(gè)字節(jié),英文占用2個(gè)字節(jié)*/
byte[] bytes4 = s.getBytes("utf-16be");//這里會(huì)有異常展示,我們就throw這個(gè)異常
for (byte b : bytes4) {
System.out.print(Integer.toHexString(b & 0xff)+" ");
}
System.out.println();
/*當(dāng)你的字節(jié)序列是某種編碼時(shí),這個(gè)時(shí)候想把字節(jié)序列變成字符串,也需要用這種編碼方式,否則會(huì)出現(xiàn)亂碼*/
String str1=new String(bytes4);//這時(shí)會(huì)使用項(xiàng)目默認(rèn)的編碼來(lái)轉(zhuǎn)換,可能出現(xiàn)亂碼
System.out.println(str1);
//要使用字節(jié)序列的編碼來(lái)進(jìn)行轉(zhuǎn)換
String str2=new String(bytes4,"utf-16be");
System.out.println(str2);
}
}

分析:

* 1. “& 0xff”的解釋:
* 0xFF表示的是16進(jìn)制(十進(jìn)制是255),表示為二進(jìn)制就是“11111111”。
* 那么&符表示的是按位數(shù)進(jìn)行與(同為1的時(shí)候返回1,否則返回0)

* 2.字節(jié)byte與int類型轉(zhuǎn)換:
* Integer.toHexString(b & 0xff)這里先把byte類型的b和0xff進(jìn)行了運(yùn)算,然后Integer.toHexString取得了十六進(jìn)制字符串
* 可以看出b & 0xFF運(yùn)算后得出的仍然是個(gè)int,那么為何要和 0xFF進(jìn)行與運(yùn)算呢?直接 Integer.toHexString(b);,將byte強(qiáng)轉(zhuǎn)為int不行嗎?答案是不行的.
* 其原因在于:1.byte的大小為8bits而int的大小為32bits;2.java的二進(jìn)制采用的是補(bǔ)碼形式
* Integer.toHexString的參數(shù)是int,如果不進(jìn)行&0xff,那么當(dāng)一個(gè)byte會(huì)轉(zhuǎn)換成int時(shí),由于int是32位,而byte只有8位這時(shí)會(huì)進(jìn)行補(bǔ)位。。。。。。
* 所以,一個(gè)byte跟0xff相與會(huì)先將那個(gè)byte轉(zhuǎn)化成整形運(yùn)算,這樣,結(jié)果中的高的24個(gè)比特就總會(huì)被清0,于是結(jié)果總是我們想要的。

* 3.utf-8編碼:中文占用3個(gè)字節(jié),英文占用1個(gè)字節(jié)
* gbk編碼:中文占用2個(gè)字節(jié),英文占用1個(gè)字節(jié)
* Java采用雙字節(jié)編碼(就是Java中的一個(gè)字符占兩個(gè)字節(jié))是utf-16be編碼。中文占用2個(gè)字節(jié),英文占用2個(gè)字節(jié)
*
* 4.當(dāng)你的字節(jié)序列是某種編碼時(shí),這個(gè)時(shí)候想把字節(jié)序列變成字符串,也需要用這種編碼方式,否則會(huì)出現(xiàn)亂碼

* 5.文本文件 就是字節(jié)序列??梢允侨我饩幋a的字節(jié)序列。
* 如果我們?cè)谥形臋C(jī)器上直接創(chuàng)建文本文件,那么該文件只認(rèn)識(shí)ANSI編碼(例如直接在電腦中創(chuàng)建文本文件)

二、File類的使用

package com.study.io;
import java.io.File;
/**
* File類的使用
*/
public class FileDemo {
/*java.iO.File類表示文件或目錄
File類只用于表示文件或目錄的信息(名稱,大小等),不能用于文件內(nèi)容的訪問(wèn)。*/
public static void main(String[] args) {
File file=new File("D:\\111");//創(chuàng)建文件對(duì)象時(shí)指定目錄需要用雙斜杠,因?yàn)椤癨”是轉(zhuǎn)義字符
/*目錄的中間的分隔符可以用雙斜杠,也可以用反斜杠,也可以用File.separator設(shè)置分隔符*/
// File file1=new File("d:"+File.separator);
// System.out.println(file.exists());//exists()判斷文件或文件夾是否存在
if(!file.exists()){//如果文件不存在
file.mkdir();//創(chuàng)建文件夾mkdir(),還有mkdirs()創(chuàng)建多級(jí)目錄
}else{
file.delete();//刪除文件或文件夾
}
//判斷是否是一個(gè)目錄isDirectory,如果是目錄返回true,如果不是目錄或者目錄不存在返回false
System.out.println(file.isDirectory());
//判斷是否是一個(gè)文件isFile
System.out.println(file.isFile());
File file2=new File("D:\\222","123.txt");
//常用API:
System.out.println(file);//打印的是file.toString()的內(nèi)容
System.out.println(file.getAbsolutePath());//獲取絕對(duì)路徑
System.out.println(file.getName());//獲取文件名稱
System.out.println(file2.getName());
System.out.println(file.getParent());//獲取父級(jí)絕對(duì)路徑
System.out.println(file2.getParentFile().getAbsolutePath());
}
}

運(yùn)行結(jié)果:

說(shuō)明:

java.iO.File類表示文件或目錄

File類只用于表示文件或目錄的信息(名稱,大小等),不能用于文件內(nèi)容的訪問(wèn)。

常用的API:

1.創(chuàng)建File對(duì)象:File file=new File(String path);注意:File.seperater();獲取系統(tǒng)分隔符,如:“\”.
2.boolean file.exists();是否存在.
3.file.mkdir();或者file.mkdirs();創(chuàng)建目錄或多級(jí)目錄。
4.file.isDirectory()判斷是否是目錄
file.isFile()判斷是否是文件。
5.file.delete();刪除文件或目錄。
6.file.createNewFile();創(chuàng)建新文件。
7.file.getName()獲取文件名稱或目錄絕對(duì)路徑。
8.file.getAbsolutePath()獲取絕對(duì)路徑。
9.file.getParent();獲取父級(jí)絕對(duì)路徑。

1、遍歷目錄

package com.study.io;
import java.io.File;
import java.io.IOException;
/**
* File工具類
* 列出File類的常用操作,比如:過(guò)濾、遍歷等操作
*/
public class FileUtils {
/**
* 列出指定目錄下(包括其子目錄)的所有文件
* @param dir
* @throws IOException
*/
public static void listDirectory(File dir) throws IOException{
if(!dir.exists()){//exists()方法用于判斷文件或目錄是否存在
throw new IllegalArgumentException("目錄:"+dir+"不存在");
}
if(!dir.isDirectory()){//isDirectory()方法用于判斷File類的對(duì)象是否是目錄
throw new IllegalArgumentException(dir+"不是目錄");
}
/*String[] fileNames = dir.list();//list()方法用于列出當(dāng)前目錄下的子目錄和文件(直接是子目錄的名稱,不包含子目錄下的內(nèi)容),返回的是字符串?dāng)?shù)組
for (String string : fileNames) {
System.out.println(string);
}*/
//如果要遍歷子目錄下的內(nèi)容就需要構(gòu)造成File對(duì)象做遞歸操作,F(xiàn)ile提供了直接返回File對(duì)象的API
File[] listFiles = dir.listFiles();//返回的是直接子目錄(文件)的抽象
if(listFiles !=null && listFiles.length >0){
for (File file : listFiles) {
/*System.out.println(file);*/
if(file.isDirectory()){
//遞歸
listDirectory(file);
}else{
System.out.println(file);
}
}
}
}
}

測(cè)試類:

public class FileUtilsTest {
public static void main(String[] args) throws IOException {
FileUtils.listDirectory(new File("D:\\ioStudy"));
}
}

運(yùn)行結(jié)果:

三、RandomAccessFile類的使用

RandomAccessFile:java提供的對(duì)文件內(nèi)容的訪問(wèn),既可以讀文件,也可以寫文件。

RandomAccessFile支持隨機(jī)訪問(wèn)文件,可以訪問(wèn)文件的任意位置。

注意 Java文件的模型:

運(yùn)行結(jié)果:

1
12
[65, 66, 127, -1, -1, -1, 127, -1, -1, -1, -42, -48]
7f
ff
ff
ff
7f
ff
ff
ff
d6
d0

四、字節(jié)流(FileInputStream、FileOutputStream)

IO流可分為輸入流和輸出流。

這里又可分為字節(jié)流和字符流。

代碼示例:

package com.study.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;
/**
* IO工具類
* ❤文件輸入輸出流:
* FileInputStream-->具體實(shí)現(xiàn)了在文件上讀取數(shù)據(jù)
* FileOutputStream-->實(shí)現(xiàn)了向文件中寫出byte數(shù)據(jù)的方法
* ❤數(shù)據(jù)輸入輸出流:
* DataOutputStream / DataInputStream:對(duì)"流"功能的擴(kuò)展,可以更加方面的讀取int,long,字符等類型數(shù)據(jù)
* DataOutputStream writeInt()/writeDouble()/writeUTF()
* ❤字節(jié)緩沖流:
* BufferedInputStream & BufferedOutputStream
* 這兩個(gè)流類位IO提供了帶緩沖區(qū)的操作,一般打開文件進(jìn)行寫入或讀取操作時(shí),都會(huì)加上緩沖,這種流模式提高了IO的性能 
* 比如:從應(yīng)用程序中把輸入放入文件,相當(dāng)于將一缸水倒入到另一個(gè)缸中:
FileOutputStream--->write()方法相當(dāng)于一滴一滴地把水“轉(zhuǎn)移”過(guò)去
DataOutputStream-->writeXxx()方法會(huì)方便一些,相當(dāng)于一瓢一瓢把水“轉(zhuǎn)移”過(guò)去
BufferedOutputStream--->write方法更方便,相當(dāng)于一瓢一瓢先放入桶中(即緩存區(qū)),再?gòu)耐爸械谷氲搅硪粋€(gè)缸中,性能提高了
*/
public class IOUtil {
/**
* 讀取指定文件內(nèi)容,按照16進(jìn)制輸出到控制臺(tái)
* 并且每輸出10個(gè)byte換行
* @param fileName
* 單字節(jié)讀取不適合大文件,大文件效率很低
*/
public static void printHex(String fileName)throws IOException{
//把文件作為字節(jié)流進(jìn)行都操作
FileInputStream in=new FileInputStream(fileName);
int b;
int i=1;
while((b=in.read())!=-1){
/* 0xff換成2進(jìn)制就是8個(gè)1,這樣與的話,其實(shí)就是取到了字符的低8位。 
* oxf就是15, 小于15的數(shù)會(huì)轉(zhuǎn)換成一個(gè)16進(jìn)制數(shù),
* 你的代碼里希望是固定的兩個(gè)16進(jìn)制數(shù),所以當(dāng)只會(huì)產(chǎn)生一個(gè)時(shí)要加個(gè)0*/
if(b <= 0xf){
//單位數(shù)前面補(bǔ)0
System.out.print("0");
}
//Integer.toHexString(b)將整型b轉(zhuǎn)換為16進(jìn)制表示的字符串
System.out.print(Integer.toHexString(b)+" ");
if(i++%10==0){
System.out.println();
}
}
in.close();//文件讀寫完成以后一定要關(guān)閉
}
/**
* 批量讀取,對(duì)大文件而言效率高,也是我們最常用的讀文件的方式
* @param fileName
* @throws IOException
*/
public static void printHexByByteArray(String fileName)throws IOException{
FileInputStream in = new FileInputStream(fileName);
byte[] buf = new byte[8 * 1024];
/*從in中批量讀取字節(jié),放入到buf這個(gè)字節(jié)數(shù)組中,
* 從第0個(gè)位置開始放,最多放buf.length個(gè) 
* 返回的是讀到的字節(jié)的個(gè)數(shù)
*/
/*int bytes = in.read(buf,0,buf.length);//一次性讀完,說(shuō)明字節(jié)數(shù)組足夠大
int j = 1; 
for(int i = 0; i < bytes;i++){
System.out.print(Integer.toHexString(buf[i] & 0xff)+" ");
if(j++%10==0){
System.out.println();
}
}*/
int bytes = 0;
int j = 1;
while((bytes = in.read(buf,0,buf.length))!=-1){
for(int i = 0 ; i < bytes;i++){
System.out.print(Integer.toHexString(buf[i] & 0xff)+" ");
/**
* & 0xff:byte類型8位,int類型32位,為了避免數(shù)據(jù)轉(zhuǎn)換錯(cuò)誤,通過(guò)&0xff將高24位清零
*/
if(j++%10==0){
System.out.println();
}
}
}
in.close();
}
/**
* 文件拷貝,字節(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);//文件不存在時(shí),會(huì)直接創(chuàng)建;如果存在,刪除后建
byte[] buf = new byte[8 * 1024];//批量讀寫
int b;
while ((b = in.read(buf, 0, buf.length)) != -1) {//read(buf,0,buf.length)帶參數(shù)的read返回的是字節(jié)的總長(zhǎng)度;當(dāng)全部讀完后返回的是-1;
out.write(buf, 0, b);
out.flush();// 最好加上
}
in.close();
out.close();
}
/**
* 進(jìn)行文件的拷貝,利用帶緩沖的字節(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+"不是文件");
}
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
int c ;
while((c = bis.read())!=-1){
bos.write(c);
bos.flush();//刷新緩沖區(qū)
}
bis.close();
bos.close();
}
/**
* 單字節(jié),不帶緩沖進(jìn)行文件拷貝
* @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){//read()不帶參數(shù)的read返回的是讀到的字節(jié)內(nèi)容;當(dāng)全部讀完后返回的都是是-1;
out.write(c);
out.flush();
}
in.close();
out.close();
}
}

測(cè)試類:

package com.study.io;
import java.io.File;
import java.io.IOException;
import org.junit.Test;
public class IOUtilTest {
@Test
public void testPrintHex() {
try {
IOUtil.printHex("D:\\Javaio\\FileUtils.java");
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testPrintHexByByteArray() {
try {
long start = System.currentTimeMillis();//當(dāng)前時(shí)間與協(xié)調(diào)世界時(shí) 1970 年 1 月 1 日午夜之間的時(shí)間差(以毫秒為單位測(cè)量)
//IOUtil.printHexByByteArray("e:\\javaio\\FileUtils.java");
//IOUtil.printHex("e:\\javaio\\1.mp3");
IOUtil.printHexByByteArray("e:\\javaio\\1.mp3");
System.out.println();
long end = System.currentTimeMillis();
System.out.println(end - start);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testCopyFile(){
try {
IOUtil.copyFile(new File("d:\\javaio\\1.txt"), new File("d:\\javaio\\1copy.txt"));
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testCopyFileByBuffer(){
try {
long start = System.currentTimeMillis();
/*IOUtil.copyFileByByte(new File("e:\\javaio\\1.mp3"), new File(
"e:\\javaio\\2.mp3"));*/ //兩萬(wàn)多毫秒
/*IOUtil.copyFileByBuffer(new File("e:\\javaio\\1.mp3"), new File(
"e:\\javaio\\3.mp3"));//一萬(wàn)多毫秒*/
IOUtil.copyFile(new File("e:\\javaio\\1.mp3"), new File(
"e:\\javaio\\4.mp3"));//7毫秒
long end = System.currentTimeMillis();
System.out.println(end - start );
} catch (IOException e) {
e.printStackTrace();
} 
}
}

五、字符流

package com.study.io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class IsrAndOswDemo {
public static void main(String[] args)throws IOException {
FileInputStream in = new FileInputStream("e:\\javaio\\utf8.txt");
InputStreamReader isr = new InputStreamReader(in,"utf-8");//默認(rèn)項(xiàng)目的編碼,操作的時(shí)候,要寫文件本身的編碼格式
FileOutputStream out = new FileOutputStream("e:\\javaio\\utf81.txt");
OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8");
/*int c ;
while((c = isr.read())!=-1){
System.out.print((char)c);
}*/
char[] buffer = new char[8*1024];
int c;
/*批量讀取,放入buffer這個(gè)字符數(shù)組,從第0個(gè)位置開始放置,最多放buffer.length個(gè)返回的是讀到的字符的個(gè)數(shù)*/
while(( c = isr.read(buffer,0,buffer.length))!=-1){
String s = new String(buffer,0,c);
System.out.print(s);
osw.write(buffer,0,c);
osw.flush();
}
isr.close();
osw.close();
}
}

字符流之文件讀寫流(FileReader/FileWriter)

字符流的過(guò)濾器

六、對(duì)象的序列化和反序列化

示例:

注意:

相關(guān)文章

  • SpringBoot 動(dòng)態(tài)配置Profile環(huán)境的方式

    SpringBoot 動(dòng)態(tài)配置Profile環(huán)境的方式

    這篇文章主要介紹了SpringBoot 動(dòng)態(tài)配置Profile環(huán)境的方式,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • Java?SSM實(shí)現(xiàn)前后端協(xié)議聯(lián)調(diào)詳解下篇

    Java?SSM實(shí)現(xiàn)前后端協(xié)議聯(lián)調(diào)詳解下篇

    首先我們已經(jīng)知道,在現(xiàn)在流行的“前后端完全分離”架構(gòu)中,前后端聯(lián)調(diào)是一個(gè)不可能避免的問(wèn)題,這篇文章主要介紹了Java?SSM實(shí)現(xiàn)前后端協(xié)議聯(lián)調(diào)過(guò)程
    2022-08-08
  • 解決異常處理問(wèn)題:getReader()?has?already?been?called?for?this

    解決異常處理問(wèn)題:getReader()?has?already?been?called?for?this

    這篇文章主要介紹了解決異常處理:getReader()?has?already?been?called?for?this問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Spring mvc整合tiles框架的簡(jiǎn)單入門教程(maven)

    Spring mvc整合tiles框架的簡(jiǎn)單入門教程(maven)

    這篇文章主要給大家介紹了關(guān)于Spring mvc整合tiles框架的簡(jiǎn)單入門教程(maven),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來(lái)一起看看詳細(xì)的介紹吧。
    2017-12-12
  • 利用POI讀取word、Excel文件的最佳實(shí)踐教程

    利用POI讀取word、Excel文件的最佳實(shí)踐教程

    Apache POI 是用Java編寫的免費(fèi)開源的跨平臺(tái)的 Java API,Apache POI提供API給Java程式對(duì)Microsoft Office格式檔案讀和寫的功能。 下面這篇文章主要給大家介紹了關(guān)于利用POI讀取word、Excel文件的最佳實(shí)踐的相關(guān)資料,需要的朋友可以參考下。
    2017-11-11
  • Java并發(fā)編程之對(duì)象的共享

    Java并發(fā)編程之對(duì)象的共享

    這篇文章主要介紹了Java并發(fā)編程之對(duì)象的共享,介紹如何共享和發(fā)布對(duì)象,使它們被安全地由多個(gè)進(jìn)程訪問(wèn)。需要的小伙伴可以參考一下
    2022-04-04
  • 簡(jiǎn)述mybatis大于小于的轉(zhuǎn)義

    簡(jiǎn)述mybatis大于小于的轉(zhuǎn)義

    這篇文章主要介紹了mybatis大于小于的轉(zhuǎn)義以及xml中常用轉(zhuǎn)義字符,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • 一個(gè)牛人給Java初學(xué)者的建議(必看篇)

    一個(gè)牛人給Java初學(xué)者的建議(必看篇)

    下面小編就為大家?guī)?lái)一篇一個(gè)牛人給Java初學(xué)者的建議(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Java自定義注解用法實(shí)例小結(jié)

    Java自定義注解用法實(shí)例小結(jié)

    這篇文章主要介紹了Java自定義注解用法,結(jié)合實(shí)例形式總結(jié)分析了java常見的自定義注解類型、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • 使用Prometheus+Grafana的方法監(jiān)控Springboot應(yīng)用教程詳解

    使用Prometheus+Grafana的方法監(jiān)控Springboot應(yīng)用教程詳解

    這篇文章主要介紹了用Prometheus+Grafana的方法監(jiān)控Springboot應(yīng)用,本文通過(guò)實(shí)例代碼詳解給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評(píng)論