我正在尝试从SQL Server基础恢复一些数据文件(主要是pdf)。
表列具有以下类型:D_BLOB(image)并包含此类数据:
对于我尝试过的代码和不同的方法,这里将我的代码的不同部分组合在一起
byte[] output = qResult.getBytes("DOCUMENT");
Blob blob = qResult.getBlob("DOCUMENT");
String document2 = qResult.getString("DOCUMENT");
InputStream input = qResult.getBinaryStream("DOCUMENT");
FileOutputStream output2 = new FileOutputStream(new File(repertoireDst + "\\" + intitule + "_test2_." + extension));
byte[] buffer = new byte[1024];
while (input.read(buffer) > 0) {
output2.write(buffer);
}
output2.close();
/************************************
* Simple input output Stream
*******************/
InputStream inputStream = blob.getBinaryStream();
OutputStream outputStream = new FileOutputStream(repertoireDst + "\\" + intitule + "_test_." + extension);
int bytesRead = -1;
byte[] buffer2 = new byte[1024];
while ((bytesRead = inputStream.read(buffer2)) != -1) {
outputStream.write(buffer2, 0, bytesRead);
}
inputStream.close();
outputStream.close();
/************************************
* Simple byte writing
*******************/
FileOutputStream fos = null;
fos = new FileOutputStream(new File(repertoireDst + "\\" + intitule + "_V1_EcritureBytesSymple." + extension));
fos.write(output);
fos.flush();
fos.close();
/*************************************************
* Ecriture of bynary stream from blob
***********************************************/
InputStream is = blob.getBinaryStream();
FileOutputStream fos1 = new FileOutputStream(repertoireDst + "\\" + intitule + "_V2_BlobEcritDirectement.txt");
int b = 0;
while ((b = is.read()) != -1) {
fos1.write(b);
}
fos1.flush();
fos1.close();
/**************************************************************************
* Testing for base 64 encoding
************************************************************************/
File fichierDestinationTemp = new File(repertoireDst + "\\" + intitule + "_V3_FichierTxtTemp.txt");
File fichierDestinationTemp2 = new File(repertoireDst + "\\" + intitule + "_V4_FichierEncoderDecoder.txt");
File fichierDestinationTemp3 = new File(repertoireDst + "\\" + intitule + "_V5_FichierEncoder." + extension);
文件fichierDestination =新文件(repertoireDst +“ \” + intitule +“。” +扩展名);
PrintWriter writer = new PrintWriter(fichierDestinationTemp, "Cp1252");
writer.print(document2);
writer.close();
byte[] encodedBytes = Base64.getEncoder().encode(output);
String encodedString = new String(encodedBytes);
FileOutputStream fos2 = new FileOutputStream(fichierDestinationTemp3);
fos2.write(encodedString.getBytes());
fos2.flush();
fos2.close();
byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
FileOutputStream fos3 = new FileOutputStream(fichierDestinationTemp2);
fos3.write(decodedBytes);
fos3.flush();
fos3.close();
当然,这会创建我的所有文件,但所有pdf文件都不可读。我想我错过了一些东西。 (是的,我知道我正在将某些部分写到.txt文件中,但这是为了看看我会得到什么,嘿,其中有些甚至在中文中也是如此……)
欢迎任何想法,想知道我在想什么。
答案 0 :(得分:0)
我终于发现存储了什么类型的数据,0x78对应于zlib 4.0。这意味着我能够使用Java中的InflateOutputStream来膨胀数据。然后我只需要用.pdf扩展名保存数据,之后一切都很好。