Java實(shí)現(xiàn)PDF轉(zhuǎn)圖片的三種方法詳解
使用PDFbox獲取pdf文件的內(nèi)容和圖片
<!-- 依賴 -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.23</version>
</dependency>
獲取傳入的pdf的圖片
我這里是分頁讀取的,更靈活
public static void main(String[] args) throws IOException {
Integer count = 0;
File file = new File("D:\\Data\\電子圖書館_使用文檔.pdf");
FileInputStream fis = new FileInputStream(file);
PDDocument document = PDDocument.load(fis);
int allPages = document.getNumberOfPages();
for (int i = 0; i < allPages; i++) {
PDPage page = document.getPage(i);
PDResources resources = page.getResources();
Iterable<COSName> xObjectNames = resources.getXObjectNames();
if (xObjectNames != null){
Iterator<COSName> iterator = xObjectNames.iterator();
while (iterator.hasNext()){
COSName key = iterator.next();
if (resources.isImageXObject(key)){
PDImageXObject image = (PDImageXObject) resources.getXObject(key);
BufferedImage bImage = image.getImage();
ImageIO.write(bImage, "PNG", new File("D:\\image\\"+"image_"+ (i+1) + "頁" + count + ".png"));
count++;
}
}
}
}
document.close();
}
獲取傳入的pdf的文字內(nèi)容
同樣的分頁讀取
public static void main(String[] args) throws IOException {
PDDocument doc = new PDDocument();
File file = new File("D:\\Data\\Java課件\\xxx.pdf");
FileInputStream fis = new FileInputStream(file);
doc = PDDocument.load(fis);
PDFTextStripper pdfStripper = new PDFTextStripper();
Splitter splitter = new Splitter();
List<PDDocument> split = splitter.split(doc);
for (int i = 0; i < split.size(); i++) {
doc = split.get(i);
PDFRenderer pdfRenderer = new PDFRenderer(doc);
String text = pdfStripper.getText(doc);
System.out.println("第"+(i+1)+"頁內(nèi)容:"+text);
}
doc.close();
}
讀取pdf中的圖片信息
package org.fzzn.component.ai.guard.duplicatechecking.tool;
import cn.hutool.core.collection.CollUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.fzzn.component.ai.guard.AiGuardManager;
import org.fzzn.component.ai.guard.duplicatechecking.dto.CheckingDoc;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* pdf中圖片提取器
*
* @author inkef
* @since 2024/11/7 17:50
*/
@Slf4j
public class PdfImageExtractor {
private List<CheckingDoc> imgList;
public List<CheckingDoc> extractAndUploadImages(byte[] pdf) throws IOException {
imgList = new ArrayList<>();
PDDocument document = PDDocument.load(pdf);
PDPageTree pages = document.getDocumentCatalog().getPages();
for (PDPage page : pages) {
PDResources resources = page.getResources();
for (COSName name : resources.getXObjectNames()) {
PDXObject xobject = resources.getXObject(name);
if (xobject instanceof PDImageXObject) {
if (!name.getName().startsWith("Image")) {
continue;
}
PDImageXObject image = (PDImageXObject) xobject;
Integer number = Integer.parseInt(name.getName().substring(5));
String fileType = "png";
String fileName = number + "." + fileType;
byte[] imageBytes = bufferedImageToByteArray(image.getImage(), fileType);
String url = AiGuardManager.me().getHandler().handleUploadFile(imageBytes, fileName);
CheckingDoc doc = new CheckingDoc();
doc.setId((long) number);
doc.setUrl(url);
imgList.add(doc);
}
}
}
return imgList;
}
/**
* 將 BufferedImage 轉(zhuǎn)換為 byte[]
*
* @param bufferedImage 要轉(zhuǎn)換的 BufferedImage 對象
* @param formatName 圖像格式(例如 "png", "jpg")
* @return 字節(jié)數(shù)組
*/
private static byte[] bufferedImageToByteArray(BufferedImage bufferedImage, String formatName) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ImageIO.write(bufferedImage, formatName, baos);
baos.flush();
byte[] imageBytes = baos.toByteArray();
baos.close();
return imageBytes;
} catch (IOException e) {
log.error("bufferedImageToByteArray error", e);
}
return null;
}
/**
* 解析返回pdf中指定的 xrefs 列表中的圖片
*
* @param pdf
* @param xrefs
* @return
* @throws IOException
*/
public List<CheckingDoc> extractAndUploadImages(byte[] pdf, List<Integer> xrefs) throws IOException {
// 是否提取全部,如果沒有指定,提取全部
Boolean isExtractAll = CollUtil.isEmpty(xrefs);
imgList = new ArrayList<>();
PDDocument document = PDDocument.load(pdf);
PDPageTree pages = document.getDocumentCatalog().getPages();
for (PDPage page : pages) {
PDResources resources = page.getResources();
for (COSName name : resources.getXObjectNames()) {
PDXObject xobject = resources.getXObject(name);
if (xobject instanceof PDImageXObject) {
if (!name.getName().startsWith("Image")) {
continue;
}
PDImageXObject image = (PDImageXObject) xobject;
Integer number = Integer.parseInt(name.getName().substring(5));
// 如果不在指定的xrefs中,跳過
if(!isExtractAll && !xrefs.contains(number)){
continue;
}
String fileType = "png";
String fileName = number + "." + fileType;
byte[] imageBytes = bufferedImageToByteArray(image.getImage(), fileType);
String url = AiGuardManager.me().getHandler().handleUploadFile(imageBytes, fileName);
CheckingDoc doc = new CheckingDoc();
doc.setId((long) number);
doc.setUrl(url);
imgList.add(doc);
}
}
}
return imgList;
}
}
Java實(shí)現(xiàn)PDF轉(zhuǎn)圖片的三種方法
提示:生成圖片以后需要將文件流關(guān)閉,不然刪除文件會刪除失敗很多人不知道怎么將pdf的文件轉(zhuǎn)換成圖片格式的,而且網(wǎng)上有很例子是跑不通的,同是也是方便自己在用到該需求的時候能夠快速度地寫出來,所以整理了幾種pdf轉(zhuǎn)換成圖片的方法工具類。
一、使用開源庫Apache PDFBox將PDF轉(zhuǎn)換為圖片
1、引入依賴庫
<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fontbox</artifactId> <version>2.0.9</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.9</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency>
2、實(shí)現(xiàn)pdf轉(zhuǎn)換圖片工具類(多頁pdf會生成多頁的圖片,后綴會生成圖片的位置序號)
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class Pdf2Png {
/**
* 使用pdfbox將整個pdf轉(zhuǎn)換成圖片
*
* @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test
* @param filename PDF文件名不帶后綴名
* @param type 圖片類型 png 和jpg
*/
public static void pdf2png(String fileAddress, String filename, String type) {
long startTime = System.currentTimeMillis();
// 將文件地址和文件名拼接成路徑 注意:線上環(huán)境不能使用\\拼接
File file = new File(fileAddress + "\\" + filename + ".pdf");
try {
// 寫入文件
PDDocument doc = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(doc);
int pageCount = doc.getNumberOfPages();
for (int i = 0; i < pageCount; i++) {
// dpi為144,越高越清晰,轉(zhuǎn)換越慢
BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI
// 將圖片寫出到該路徑下
ImageIO.write(image, type, new File(fileAddress + "\\" + filename + "_" + (i + 1) + "." + type));
}
long endTime = System.currentTimeMillis();
System.out.println("共耗時:" + ((endTime - startTime) / 1000.0) + "秒"); //轉(zhuǎn)化用時
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
pdf2png("C:\\Users\\user\\Desktop\\test", "測試", "png");
}
}使用Apache PDFBox將PDF轉(zhuǎn)換為圖片成功

3、按照固定頁數(shù)來將pdf轉(zhuǎn)換成圖片的工具類(自由選擇pdf轉(zhuǎn)換圖片的頁數(shù))
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class Pdf2Png {
/**
* 自由確定起始頁和終止頁
* @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test
* @param filename PDF文件名不帶后綴名
* @param indexOfStart 開始頁 開始轉(zhuǎn)換的頁碼,從0開始
* @param indexOfEnd 結(jié)束頁 停止轉(zhuǎn)換的頁碼,-1為全部
* @param type 圖片類型 png 和jpg
*/
public static void pdf2png(String fileAddress,String filename,int indexOfStart,int indexOfEnd,String type) {
long startTime = System.currentTimeMillis();
// 將文件地址和文件名拼接成路徑 注意:線上環(huán)境不能使用\\拼接
File file = new File(fileAddress+"\\"+filename+".pdf");
try {
PDDocument doc = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(doc);
int pageCount = doc.getNumberOfPages();
for (int i = indexOfStart; i < indexOfEnd; i++) {
// dpi為144,越高越清晰,轉(zhuǎn)換越慢
BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI
// 將圖片寫出到該路徑下
ImageIO.write(image, type, new File(fileAddress+"\\"+filename+"_"+(i+1)+"."+type));
}
long endTime = System.currentTimeMillis();
System.out.println("共耗時:" + ((endTime - startTime) / 1000.0) + "秒"); // 轉(zhuǎn)換用時
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
pdf2png("C:\\Users\\user\\Desktop\\test", "思泰得流式檢測報告-00420299-任蛆小-RA202302100117",2,3, "png");
}
}自由頁數(shù)轉(zhuǎn)換成功

二、使用PDF Box將多頁的pdf轉(zhuǎn)換一張長圖片的方法
1、引入PDF Box需要的依賴
<dependency>
<groupId>net.sf.cssbox</groupId>
<artifactId>pdf2dom</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.12</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-tools</artifactId>
<version>2.0.12</version>
</dependency>2、編寫將多頁P(yáng)DF轉(zhuǎn)換多張圖片的工具類
import com.lowagie.text.pdf.PdfReader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class Pdf2Png {
/***
* PDF文件轉(zhuǎn)PNG圖片,全部頁數(shù)
* @param pdfFilePath pdf完整路徑:C:\\Users\\user\\Desktop\\test\\1234.pdf
* @param dpi dpi越大轉(zhuǎn)換后越清晰,相對轉(zhuǎn)換速度越慢
*/
public static void pdf2Image(String pdfFilePath, int dpi) {
long startTime = System.currentTimeMillis();
File file = new File(pdfFilePath);
PDDocument pdDocument;
try {
String imgPdfPath = file.getParent();
int dot = file.getName().lastIndexOf('.');
// 獲取圖片文件名
String imagePdfName = file.getName().substring(0, dot);
pdDocument = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(pdDocument);
/* dpi越大轉(zhuǎn)換后越清晰,相對轉(zhuǎn)換速度越慢 */
PdfReader reader = new PdfReader(pdfFilePath);
int pages = reader.getNumberOfPages();
StringBuffer imgFilePath;
for (int i = 0; i < pages; i++) {
String imgFilePathPrefix = imgPdfPath + File.separator + imagePdfName;
imgFilePath = new StringBuffer();
imgFilePath.append(imgFilePathPrefix);
imgFilePath.append("_");
imgFilePath.append((i + 1));
imgFilePath.append(".png");
File dstFile = new File(imgFilePath.toString());
BufferedImage image = renderer.renderImageWithDPI(i, dpi);
ImageIO.write(image, "png", dstFile);
}
long endTime = System.currentTimeMillis();
System.out.println("共耗時:" + ((endTime - startTime) / 1000.0) + "秒"); //轉(zhuǎn)化用時
} catch (IOException e) {
e.printStackTrace();
}
}
}三、使用文件流整個pdf轉(zhuǎn)換成圖片 (生成圖片,并將生成的圖片路徑返回)
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.*;
public class Pdf2Png {
/**
* 使用文件流整個pdf轉(zhuǎn)換成圖片
* @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test
* @param filename PDF文件名不帶后綴名
* @param type 圖片類型 png 、jpg
*/
public static List<Map<String, String>> pdfToImage(String fileAddress, String filename, String type) {
long startTime = System.currentTimeMillis();
List<Map<String, String>> list = new ArrayList<>();
Map<String, String> resultMap = null;
PDDocument pdDocument = null;
String fileName = null;
String imgPath = null;
try {
// 將文件地址和文件名拼接成路徑 注意:線上環(huán)境不能使用\\拼接
File FilePath = new File(fileAddress + "\\" + filename + ".pdf");
// 文件流
FileInputStream inputStream = new FileInputStream(FilePath);
int dpi = 296;
pdDocument = PDDocument.load(inputStream);
PDFRenderer renderer = new PDFRenderer(pdDocument);
int pageCount = pdDocument.getNumberOfPages();
/* dpi越大轉(zhuǎn)換后越清晰,相對轉(zhuǎn)換速度越慢 */
for (int i = 0; i < pageCount; i++) {
resultMap = new HashMap<>();
fileName = filename + "_" + (i + 1) + "." + type;
imgPath = fileAddress + "\\" + fileName;
BufferedImage image = renderer.renderImageWithDPI(i, dpi);
ImageIO.write(image, type, new File(imgPath));
resultMap.put("fileName", fileName);
resultMap.put("filePath", imgPath); // 圖片路徑
list.add(resultMap);
}
long endTime = System.currentTimeMillis();
System.out.println("共耗時:" + ((endTime - startTime) / 1000.0) + "秒"); //轉(zhuǎn)化用時
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 這里需要關(guān)閉PDDocument,不然如果想要刪除pdf文件時會提示文件正在使用,無法刪除的情況
pdDocument.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return list;
}
public static void main(String[] args) throws FileNotFoundException {
pdfToImage("C:\\Users\\user\\Desktop\\test", "測試", "png");
}
}pdf轉(zhuǎn)圖片
Apache PDFBox 庫是一個開源、用于操作 PDF 文檔的 Java 工具庫。PDFBox 允許創(chuàng)建新的 PDF 文檔、操作現(xiàn)有文檔,以及從文檔中提取內(nèi)容。獲取 Apache PDFBox 下載地址,目前版本 2.0.25,核心 jar 是 pdfbox-2.0.25.jar,其他還有幾個 jar 可以根據(jù)需要進(jìn)行導(dǎo)入。
pdf合并
package pdfUtity;
import org.apache.pdfbox.multipdf.PDFMergerUtility;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
//import org.apache.pdfbox.util.PDFMergerUtility;
public class pdfMerge {
private static String[] getPdfs(String fileAddress) throws IOException {
File file = new File(fileAddress);
String[] pdfs;
if (file.isDirectory()) {
pdfs = file.list();
return pdfs;
} else {
throw new IOException("輸入的路徑有問題");
}
}
public static void main(String[] args) throws Exception {
Scanner in = new Scanner(System.in);
PDFMergerUtility mergePdf = new PDFMergerUtility();
System.out.println("請輸入要合并的PDF文件所在的文件夾路徑");
String fileAddress = in.nextLine();
System.out.println("你輸入的路徑是:" + fileAddress);
String destinationFileName = "javaweb2020.pdf";
String[] pdfs = getPdfs(fileAddress);
for (int i = 0; i < pdfs.length; i++)
mergePdf.addSource(fileAddress + File.separator + pdfs[i]);
mergePdf.setDestinationFileName(destinationFileName);
System.out.println("合并比較費(fèi)時間,請等待個幾分鐘吧!");
mergePdf.mergeDocuments();
System.out.print("合并完成");
}
}pdf拆分為單頁
package pdfUtity;
import org.apache.pdfbox.multipdf.Splitter;
import org.apache.pdfbox.pdmodel.PDDocument;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Iterator;
public class pdfSplitter {
public static void main(String[] args)throws IOException {
//把需要拆分的pdf文件加載進(jìn)來
File file = new File("d://desktopfile//pdfs//1.pdf");
PDDocument document = PDDocument.load(file);
//創(chuàng)建一個拆分器對象
Splitter splitter = new Splitter();
//list中存放好被拆分的pdf對象 其中內(nèi)容是pdf的每一頁
List<PDDocument>Pages = splitter.split(document);
//創(chuàng)建迭代器對象
Iterator<PDDocument>iterator = Pages.listIterator();
//saving splits as individual PDF document
int i = 1;
while(iterator.hasNext()) {
PDDocument pd = iterator.next();
pd.save("d://desktopfile//pdfPhotos//"+i++ +".pdf");
}
System.out.println("pdf拆分成功");
document.close();
}
}pdf轉(zhuǎn)換為圖片
package pdfUtity;/*
* 讀取 pdf,將其中的某一頁另存為 png 圖片
*/
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.tools.imageio.ImageIOUtil;
public class PDFSavePNG
{
public static void main(String[] args)
{
try
{
// 打開來源 pdf
PDDocument pdfDocument = PDDocument.load(new File("d://desktopfile//pdfs//1.pdf"));
PDFRenderer pdfRenderer = new PDFRenderer(pdfDocument);
for(int pageNumber=0;pageNumber<pdfDocument.getNumberOfPages();pageNumber++){
// 提取的頁碼
// int pageNumber = 0;
// 以300 dpi 讀取存入 BufferedImage 對象
int dpi = 300;
BufferedImage buffImage = pdfRenderer.renderImageWithDPI(pageNumber, dpi, ImageType.RGB);
// 將 BufferedImage 寫入到 png
ImageIOUtil.writeImage(buffImage, "d://desktopfile//pdfPhotos//"+pageNumber+".png", dpi);
// 關(guān)閉文檔
}
pdfDocument.close();
}
catch (InvalidPasswordException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
圖片轉(zhuǎn)換為pdf
package pdfUtity;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
/**
* @author: Serendipity
* Date: 2022/3/16 22:40
* Description:
*/
public class photoToPDF {
/**
* 多圖片合成pdf的限制后綴
*/
private static final List IMAGE_SUFFIX = Arrays.asList("jpg", "png", "jpeg");
/**
* 多個圖片合成一個pdf
*
* @param imgFolder 多圖片的文件夾路徑 例如:"D:\\image\\"
* @param target 合并的圖片路徑 "D:\\image\\merge.pdf"
* @throws IOException
*/
public static void manyImageToOnePdf(String imgFolder, String target) throws IOException {
PDDocument doc = new PDDocument();
//創(chuàng)建一個空的pdf文件
doc.save(target);
PDPage page;
PDImageXObject pdImage;
PDPageContentStream contents;
BufferedImage bufferedImage;
String fileName;
float w, h;
String suffix;
File tempFile;
int index;
File folder = new File(imgFolder);
for (int i = 0; i < folder.listFiles().length; i++) {
tempFile = folder.listFiles()[i];
if (!tempFile.isFile()) {
continue;
}
fileName = tempFile.getName();
index = fileName.lastIndexOf(".");
if (index == -1) {
continue;
}
//獲取文件的后綴
suffix = fileName.substring(index + 1);
//如果文件后綴不是圖片格式,跳過當(dāng)前循環(huán)
if (!IMAGE_SUFFIX.contains(suffix)) {
continue;
}
bufferedImage = ImageIO.read(folder.listFiles()[i]);
//Retrieving the page
pdImage = LosslessFactory.createFromImage(doc, bufferedImage);
w = pdImage.getWidth();
h = pdImage.getHeight();
page = new PDPage(new PDRectangle(w, h));
contents = new PDPageContentStream(doc, page);
contents.drawImage(pdImage, 0, 0, w, h);
System.out.println("Image inserted");
contents.close();
doc.addPage(page);
}
//保存pdf
doc.save(target);
//關(guān)閉pdf
doc.close();
}
public static void main(String[] args) {
try {
manyImageToOnePdf("d://圖片","photo.pdf");
} catch (IOException e) {
e.printStackTrace();
}
}
}以上就是Java實(shí)現(xiàn)PDF轉(zhuǎn)圖片的三種方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Java PDF轉(zhuǎn)圖片的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java單線程程序?qū)崿F(xiàn)實(shí)現(xiàn)簡單聊天功能
這篇文章主要介紹了Java單線程程序?qū)崿F(xiàn)實(shí)現(xiàn)簡單聊天功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
詳解Java并發(fā)編程中的優(yōu)先級隊(duì)列PriorityBlockingQueue
PriorityBlockingQueue是Java中實(shí)現(xiàn)了堆數(shù)據(jù)結(jié)構(gòu)的線程安全的有界阻塞隊(duì)列。本文將會深入解讀PriorityBlockingQueue的源碼實(shí)現(xiàn),感興趣的可以了解一下2023-05-05
Spring MVC 關(guān)于controller的字符編碼問題
在使用springMVC框架構(gòu)建web應(yīng)用,客戶端常會請求字符串、整型、json等格式的數(shù)據(jù),通常使用@ResponseBody注解使 controller回應(yīng)相應(yīng)的數(shù)據(jù)而不是去渲染某個頁面。2017-03-03
Springboot修改post請求接口入?yún)⒒蛑匦沦x值方式
這篇文章主要介紹了Springboot修改post請求接口入?yún)⒒蛑匦沦x值方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-05-05
解決使用RestTemplate時報錯RestClientException的問題
這篇文章主要介紹了解決使用RestTemplate時報錯RestClientException的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
MyBatis中XML 映射文件中常見的標(biāo)簽說明
這篇文章主要介紹了MyBatis中XML 映射文件中常見的標(biāo)簽說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07

