1. java 壓縮和序列化
壓縮和序列化主要用在數據的存儲和傳輸上,二者都是由IO流相關知識實現,這里統一介紹下。
全部章節傳送門:
Java I/O類支持讀寫壓縮格式的數據流,你可以用他們對其他的I/O流進行封裝,以提供壓縮功能。
GZIP介面比較簡單,適合對單個數據流進行壓縮,在Linux系統中使用較多。
ZIP格式可以壓縮多個文件,而且可以和壓縮工具進行協作,是經常使用的壓縮方法。
JAR(Java Archive,Java 歸檔文件)是與平台無關的文件格式,它允許將許多文件組合成一個壓縮文件。為 J2EE 應用程序創建的 JAR 文件是 EAR 文件(企業 JAR 文件)。
JAR 文件格式以流行的 ZIP 文件格式為基礎。與 ZIP 文件不同的是,JAR 文件不僅用於壓縮和發布,而且還用於部署和封裝庫、組件和插件程序,並可被像編譯器和 JVM 這樣的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用來指示工具如何處理特定的 JAR。
如果一個Web應用程序的目錄和文件非常多,那麼將這個Web應用程序部署到另一台機器上,就不是很方便了,我們可以將Web應用程序打包成Web 歸檔(WAR)文件,這個過程和把Java類文件打包成JAR文件的過程類似。利用WAR文件,可以把Servlet類文件和相關的資源集中在一起進行發布。在這個過程中,Web應用程序就不是按照目錄層次結構來進行部署了,而是把WAR文件作為部署單元來使用。
一個WAR文件就是一個Web應用程序,建立WAR文件,就是把整個Web應用程序(不包括Web應用程序層次結構的根目錄)壓縮起來,指定一個.war擴展名。下面我們將第2章的Web應用程序打包成WAR文件,然後發布
要注意的是,雖然WAR文件和JAR文件的文件格式是一樣的,並且都是使用jar命令來創建,但就其應用來說,WAR文件和JAR文件是有根本區別的。JAR文件的目的是把類和相關的資源封裝到壓縮的歸檔文件中,而對於WAR文件來說,一個WAR文件代表了一個Web應用程序,它可以包含 Servlet、HTML頁面、Java類、圖像文件,以及組成Web應用程序的其他資源,而不僅僅是類的歸檔文件。
在命令行輸入jar即可查看jar命令的使用方法。
把對象轉換為位元組序列的過程稱為對象的序列化。把位元組序列恢復為對象的過程稱為對象的反序列化。
對象的序列化主要有兩種用途:
java.io.ObjectOutputStream代表對象輸出流,它的writeObject(Object obj)方法可對參數指定的obj對象進行序列化,把得到的位元組序列寫到一個目標輸出流中。
java.io.ObjectInputStream代表對象輸入流,它的readObject()方法從一個源輸入流中讀取位元組序列,再把它們反序列化為一個對象,並將其返回。
只有實現了Serializable的對象才能被序列化。對象序列化包括如下步驟:
對象反序列化的步驟如下:
創建一個可以可以序列化的對象。
然後進行序列化和反序列化測試。
serialVersionUID: 字面意思上是序列化的版本號,凡是實現Serializable介面的類都有一個表示序列化版本標識符的靜態變數。
JAVA序列化的機制是通過判斷類的serialVersionUID來驗證的版本一致的。在進行反序列化時,JVM會把傳來的位元組流中的serialVersionUID於本地相應實體類的serialVersionUID進行比較。如果相同說明是一致的,可以進行反序列化,否則會出現反序列化版本一致的異常,即是InvalidCastException。
為了提高serialVersionUID的獨立性和確定性,強烈建議在一個可序列化類中顯示的定義serialVersionUID,為它賦予明確的值。
控制序列化欄位還可以使用Externalizable介面替代Serializable借口。此時需要定義一個默認構造器,否則將為得到一個異常(java.io.InvalidClassException: Person; Person; no valid constructor);還需要定義兩個方法(writeExternal()和readExternal())來控制要序列化的欄位。
如下為將Person類修改為使用Externalizable介面。
transient修飾符僅適用於變數,不適用於方法和類。在序列化時,如果我們不想序列化特定變數以滿足安全約束,那麼我們應該將該變數聲明為transient。執行序列化時,JVM會忽略transient變數的原始值並將默認值(引用類型就是null,數字就是0)保存到文件中。因此,transient意味著不要序列化。
靜態變數不是對象狀態的一部分,因此它不參與序列化。所以將靜態變數聲明為transient變數是沒有用處的。
2. java 問題 如何將ppt文件轉為視頻格式文件,最好是非工具類。
一是用office 2010,它可以直接將PPT轉換成AVI。(不知道你的office是不是2010)
二是用屏幕錄像軟體,把PPT錄製成視頻。 如屏幕錄像專家、玩家寶寶等。
三是用轉換軟體:狸窩轉換器,把PPT轉換成視頻格式。 但它需要注冊成VIP會員(也就是付費)後,才可以使用。
其它轉換PPT的軟體,真的是相當的少!(因為office2010已具備這個功能了,所以,沒有再開發這個軟體的了)
3. java中怎樣將視頻文件轉換成二進制文件再轉換回視頻文件求具體代碼!
其實x.avi本身也是二進制文件,你只需要按照二進制文件讀取方式讀取就可以了,所以專不理解你這里屬的x.dat又是什麼樣的?或者是說輪換成文本文件?如果這樣的話你將x.avi一個字元一個字元地讀取然後用16進制保存到x.dat中即可。
再轉換為y.avi時同理,讀取x.dat中的兩個文本字元,轉換成byte再寫入y.avi即可。
4. AVI格式的文件能否壓縮如果能,用什麼方法謝謝!!!
用視頻轉換軟體可以了,推薦你一個很好用的,total
video
converter,avi格式是未經壓縮的文件,就像聲音文件里的wav格式,圖片里的bmp格式,壓縮成rm或rmvb容量會小很多很多,因為這是一種流媒體格式目前主要用於網路點播,目的就是要減小數據量,而質量還不錯
5. 請問怎麼能夠通過JAVA將PPT轉換為SWF文件
一款可以把Flash動畫轉換成VCD的軟體。
將Flash動畫刻錄成VCD
軟體名片:SWF2Video Pro V1.0.1.2
下載地址:
特色功能:可以將Flash文件(swf)轉換為AVI格式,支持對音頻,視頻的設置,包括視頻壓縮。SWF2Video Pro新增對用Flash MX製作的SWF格式文件的支持;並支持批量轉換;可以將SWF文件輸出為GIF、PNG、TGA格式的圖像序列
軟體缺憾:設置較為簡單,簡單轉換尚可;專業應用功能略顯不足
詼諧、幽默而又小巧的Flas動畫是互聯網上最為流行的動畫形式,並且有許多免費資源供動漫愛好者下載。遺憾的是,現在電腦網路的普及率問題,許多人還無法直接欣賞到這些可愛的小動畫,而電視和VCD機卻已相當普及,如果我們能把Flash動畫刻錄成VCD,就可以讓更多的人通過不同的途徑享受到電腦網路給人們生活帶來的樂趣。SWF2Video Pro是一個非常方便的將Flash轉換成AVI文件的軟體,操作簡單,效果優秀。在各大網站的下載排行榜上都有很好的成績。下面讓我們來體會一下吧!
操作步驟:
把Flash動畫刻錄成VCD,需要先把下載的Flash動畫格式轉換成AVI格式,然後通過視頻編輯軟體進行簡單的編輯,轉換成VCD的MPGE-1格式,再刻錄成VCD光碟。
Step1:將SWF格式的Flash動畫轉換成AVI文件
運行Swf2Video Pro,點擊菜單欄的「打開」,導入一個swf格式的Flash文件。點擊「控制/搜索模式」,找到並記住真正需要開始轉換的「當前幀」和「結束幀」,便於刪去Flash動畫開頭的「load……」等不需的畫面。
點擊「文件/創建AVI」,確定AVI文件的名稱和路徑後,進入「AVI輸出選項」窗口,對AVI文件進行一些設置,如圖2所示。持續時間:填入通過「搜索模式」確定的「當前幀」和「結束幀」,掐頭去尾,控制轉換的范圍,只選最精彩的;尺寸:取消「使用原始文檔大小」,填入352和288,並保留「保持縱橫比」,否則有可能使畫面變形;視頻:選用「未壓縮」,以保證AVI文件的質量;也可通過點擊「選擇」按鈕打開「視頻壓縮」窗口,在「壓縮程序」中選擇一種壓縮方法,如「MicrosoftVideo 1」,這樣轉換後的AVI文件會小很多;音頻:如選用Flash動畫本身的聲音,則需將「記錄用音量」調高,以保證轉換後的音量,也可選擇音頻的品質,如「44100HZ,16位,立體聲」、「11025HZ,8位,立體聲」等。設置完成後,按「確定」就開始轉換,先轉換音頻再轉換視頻。
Step2:用Nero刻錄軟體將AVI文件刻錄成VCD
對轉換成AVI格式的Flash動畫,我們可以用視頻編輯軟體,如「會聲會影」、「VideoPack 5」、甚至是「Premiere」等進行編輯,添加標題、字幕、過渡等效果,這樣可以使VCD看上去更加精彩、更加專業。如果我們不需要編輯,就可以直接利用Nero刻錄軟體將AVI文件刻錄成VCD,非常方便。運行「Nero Express」,選擇「視頻/圖片」,再選擇「Video CD」,進入「我的視頻CD(VCD)」窗口,點擊「添加」,選擇並添加需要刻錄的AVI文件,然後進入菜單編輯窗口,根據需要進行菜單編排、設定背景和文字按鈕,最後按「刻錄」就行了。
注意:有時我們下載的Flash動畫是.exe格式的,這種格式實際上是內置了Flash播放程序,對這種Flash動畫,我們可以用ExeToSwf V1.0將其轉換為.swf格式。ExeToSwf是一款免費綠色軟體,可在下載,解壓後直接運行,在「SourceFile」框中填入要轉換的exe文件路徑和名稱,點擊「Convert」按鈕即可很快將exe格式的Flash動畫轉換成swf格式的Flash動畫。
PowerPoint to Flash v1.6.8
PowerPointtoFlash是第一個能夠將PowerPoint的*.ppt檔轉換為Flash的*.swf文件的軟體,它支持大量轉檔,可一次將多個演示文稿檔案轉換成目前最受歡迎的Flash格式,方便發布於網頁,因為Flash只要瀏覽器就可以開啟了,而*.ppt文件需要安裝PowerPoint或檢視程序。
Name:crsky Code:2883-432A-809A-669D-DBF6-B3BB-C6FC-4E6D
另外,虛機團上產品團購,超級便宜
6. java 如何將多張JPG圖片合成視頻文件,比如:avi格式 或 mpg格式.
之前有做過圖片合成視頻的功能,大概代碼就是這樣,你可以看一下
/**
* 圖片合成視頻
* @param mp4SavePath 視頻保存路徑
* @param imageDir 圖片地址
* @param rate 這個可以理解成視頻每秒播放圖片的數量
*/
public static boolean jpgToMp4(String mp4SavePath, String imageDir, double rate) {
FFmpegFrameRecorder recorder = null;
boolean flag = true;
try {
File[] files = FileUtils.fileSort(imageDir);
int [] widthArray = new int[files.length];
int [] heightArray = new int[files.length];
/**
* 獲取合成視頻圖片的最大寬高,避免圖片比例不一致最終合成效果差
*/
for (int i = 0; i < files.length; i++) {
BufferedImage bufferedImage = ImageIO.read(files[i]);
widthArray[i] = bufferedImage.getWidth();
heightArray[i] = bufferedImage.getHeight();
}
/**
* 這個方法主要是防止圖片比例達不到視頻合成比例的要求,如果達不到下面條件視頻則會無法播放
* 圖片寬:必須要被32整除
* 圖片高:必須要被2整除
*/
int [] maxWH = getImgMaxWH(widthArray,heightArray);
recorder = new FFmpegFrameRecorder(mp4SavePath,maxWH[0],maxWH[1]);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
/**
* 視頻質量:目前測試出來的是25-30最清晰,視頻質量范圍好像是0-40,具體可以自己慢慢測
*/
recorder.setVideoQuality(25);
recorder.setFormat("mp4");
recorder.setFrameRate(rate > 0 ? rate : 1);
recorder.setPixelFormat(0);
recorder.start();
OpenCVFrameConverter.ToIplImage conveter = new OpenCVFrameConverter.ToIplImage();
/**
* 合成視頻
*/
for(int i = 0; i < files.length; i++ ){
opencv_core.IplImage image = cvLoadImage(files[i].getPath());
recorder.record(conveter.convert(image));
opencv_core.cvReleaseImage(image);
}
logger.info("合成成功");
} catch(Exception e) {
e.printStackTrace();
flag = false;
logger.error("合成失敗");
} finally {
try {
if (recorder != null){
recorder.stop();
recorder.release();
}
} catch (FrameRecorder.Exception e) {
e.printStackTrace();
}
}
return flag;
}