\r
package org.tianocore.framework.tasks;\r
\r
-import java.io.DataInputStream;\r
+import java.io.ByteArrayOutputStream;\r
import java.io.DataOutputStream;\r
-import java.io.File;\r
-import java.io.FileInputStream;\r
-import java.io.FileOutputStream;\r
import java.util.ArrayList;\r
import java.util.Iterator;\r
import java.util.List;\r
CompressSection indicate that all section which in it should be compressed. \r
\r
**/\r
-public class CompressSection implements Section, FfsTypes{\r
+public class CompressSection implements Section, FfsTypes {\r
//\r
// The attribute of compressName.\r
//\r
- String compressName = "";\r
+ private String compressName = "";\r
//\r
// The list contained the SectFile element.\r
//\r
- List<Object> SectList = new ArrayList<Object>();\r
+ private List<Section> sectList = new ArrayList<Section>();\r
\r
+ public static Object semaphore = new Object();\r
/**\r
toBuffer\r
\r
@param Buffer The point of output buffer\r
\r
**/\r
- public void toBuffer (DataOutputStream Buffer){\r
+ public void toBuffer (DataOutputStream buffer){\r
\r
Section sect;\r
- File compressOut;\r
\r
//\r
// Get section file in compress node.\r
//\r
try{\r
- compressOut = new File ("Compress.temp");\r
- FileOutputStream fo = new FileOutputStream (compressOut.getName());\r
- DataOutputStream Do = new DataOutputStream (fo);\r
+ \r
+ ByteArrayOutputStream bo = new ByteArrayOutputStream ();\r
+ DataOutputStream Do = new DataOutputStream (bo);\r
\r
//\r
// Get each section which under the compress {};\r
// And add it is contains to File;\r
//\r
- Iterator SectionIter = SectList.iterator();\r
+ Iterator SectionIter = sectList.iterator();\r
while (SectionIter.hasNext()){\r
sect = (Section)SectionIter.next();\r
\r
}\r
Do.close(); \r
\r
- //\r
- // Get contain to Buffer\r
- //\r
- FileInputStream fi = new FileInputStream (compressOut.getName());\r
- DataInputStream di = new DataInputStream (fi);\r
- byte[] fileBuffer = new byte[(int)compressOut.length()];\r
- di.read(fileBuffer);\r
- \r
+ synchronized (semaphore) {\r
//\r
// Call compress\r
//\r
+ byte[] fileBuffer = bo.toByteArray();\r
Compress myCompress = new Compress(fileBuffer, fileBuffer.length); \r
\r
//\r
Ch.SectionHeader.type = (byte) EFI_SECTION_COMPRESSION;\r
\r
//\r
- // Note: The compressName was not effective now. Using the\r
+ // Note: The compressName was not efsfective now. Using the\r
// EFI_STANDARD_COMPRSSION for compressType .\r
// That is follow old Genffsfile tools. Some code will be added for \r
// the different compressName;\r
//\r
// First add CompressHeader to Buffer, then add Compress data.\r
//\r
- Buffer.write (headerBuffer);\r
- Buffer.write(myCompress.outputBuffer); \r
+ buffer.write (headerBuffer);\r
+ buffer.write(myCompress.outputBuffer); \r
\r
//\r
- // 4 Byte aligment \r
+ // Buffer 4 Byte aligment \r
//\r
int size = Ch.GetSize() + myCompress.outputBuffer.length;\r
\r
while ((size & 0x03) != 0){\r
size ++;\r
- Buffer.writeByte(0);\r
+ buffer.writeByte(0);\r
}\r
- \r
//\r
// Delete temp file\r
//\r
- di.close();\r
- compressOut.delete();\r
+ //di.close();\r
+ //compressOut.delete();\r
+ }\r
\r
}\r
catch (Exception e){\r
@param sectFile SectFile element which succeed from section class.\r
**/\r
public void addSectFile (SectFile sectFile) {\r
- SectList.add(sectFile);\r
+ sectList.add(sectFile);\r
\r
} \r
\r
@param tool Tool element which succeed from section class.\r
**/\r
public void addTool (Tool tool) {\r
- SectList.add(tool);\r
+ sectList.add(tool);\r
}\r
}
\ No newline at end of file