CMS not yielding to java.util.zip???
Hello,
I have been trying to track down some long pauses in our voldemort BDB JE server. It appears these pauses correspond to CMS concurrent phases. In one example below it is during the concurrent-mark and in the other example it is during concurrent-sweep. From what I have been able to piece together, the GC thread should be yielding to the applications threads soon after they post a yield request. But that doesn't appear to be happening below as far as I can tell. The application seems to hang until the CMS phase ends which can be several seconds with our 6g heap size.
Am I interpreting things properly? Should the GC thread be yielding to the application yield requests? Threads dumps frequently show a thread as RUNNABLE at java.util.zip.Adler32.updateBytes(Native Method). This happens more frequently than I would expect by chance. Is it possible that the java.util.zip native method is unable to post the yield request??? I am running out of ideas here. Any suggestions would be appreciated.
thanks,
-sfp
A strace shows:
14914 14:52:08.217539 write(1, "1880.097", 8) = 8 <0.000023>
14914 14:52:08.217619 write(1, ": ", 2) = 2 <0.000012>
14914 14:52:08.217673 write(1, "[CMS-concurrent-sweep: 3.206/3.2"..., 40) = 40 <0.000013>
14914 14:52:08.217724 write(1, " (CMS-concurrent-sweep yielded 0"..., 40) = 40 <0.000013>
14914 14:52:08.217773 times({tms_utime=106915, tms_stime=19188, tms_cutime=0, tms_cstime=0}) = 558234922 <0.000015>
14914 14:52:08.217829 write(1, " [Times: user=3.20 sys=0.00, rea"..., 45) = 45 <0.000012>
14914 14:52:08.217879 write(1, "\n", 1) = 1 <0.000012>
14914 14:52:08.217929 futex(0x2aac40a8a324, FUTEX_CMP_REQUEUE_PRIVATE, 1, 2147483647, 0x464a9c18, 8) = 1 <0.000014>
after which thread 14946 starts getting the WAKEs from the thread 14914 GC thread.
14946 14:52:08.217975 <... futex resumed> ) = 0 <1.891633>
14946 14:52:08.218028 futex(0x464a9c18, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...>
14914 14:52:08.218063 futex(0x464a9c18, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
14946 14:52:08.218085 <... futex resumed> ) = -1 EAGAIN (Resource temporarily unavailable) <0.000033>
14946 14:52:08.218121 futex(0x464a9c18, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
14914 14:52:08.218140 <... futex resumed> ) = 0 <0.000062>
14946 14:52:08.218161 <... futex resumed> ) = 0 <0.000026>
14946 14:52:08.218196 futex(0x47275e84, FUTEX_CMP_REQUEUE_PRIVATE, 1, 2147483647, 0x464ab728, 62 <unfinished ...>
And from a later run (look at the 2 seconds before the thread dump was forced):
(the timelogger is a trivial webapp to log a timestamp to make sure we aren't in a Stop The World GC)
-XX:+CMSClassUnloadingEnabled -XX:CMSCoordinatorYieldSleepCount=20 -XX:CMSYieldSleepCount=10 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/tmp -XX:+ManagementServer -XX:MaxHeapSize=6442450944 -XX:NewSize=314572800 -XX:+PrintCMSInitiationStatistics -XX:PrintCMSStatistics=2 -XX:+PrintClassHistogram -XX:+PrintCommandLineFlags -XX:PrintFLSStatistics=1 -XX:+PrintGC -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+TraceClassUnloading -XX:+UseConcMarkSweepGC
1122.994: [GC [1 CMS-initial-mark: 4754072K(5324800K)] 4772017K(5601280K), 0.0044590 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
Total time for which application threads were stopped: 0.0092070 seconds
1122.999: [CMS-concurrent-mark-start]
Dec 22, 2009 3:37:11 PM com.lotame.timelogger.TimeLoggerResource update
INFO: sequence: 2602 logged @ 2009-12-22.15:37:11.647 delta=250
Dec 22, 2009 3:37:11 PM com.lotame.timelogger.TimeLoggerResource update
INFO: sequence: 2603 logged @ 2009-12-22.15:37:11.896 delta=249
Dec 22, 2009 3:37:12 PM com.lotame.timelogger.TimeLoggerResource update
INFO: sequence: 2604 logged @ 2009-12-22.15:37:12.147 delta=251
Dec 22, 2009 3:37:12 PM com.lotame.timelogger.TimeLoggerResource update
INFO: sequence: 2605 logged @ 2009-12-22.15:37:12.397 delta=250
Dec 22, 2009 3:37:12 PM com.lotame.timelogger.TimeLoggerResource update
INFO: sequence: 2606 logged @ 2009-12-22.15:37:12.646 delta=249
Dec 22, 2009 3:37:12 PM com.lotame.timelogger.TimeLoggerResource update
INFO: sequence: 2607 logged @ 2009-12-22.15:37:12.897 delta=251
Dec 22, 2009 3:37:13 PM com.lotame.timelogger.TimeLoggerResource update
INFO: sequence: 2608 logged @ 2009-12-22.15:37:13.146 delta=249
Dec 22, 2009 3:37:13 PM com.lotame.timelogger.TimeLoggerResource update
INFO: sequence: 2609 logged @ 2009-12-22.15:37:13.396 delta=250
Application time: 2.0828760 seconds
2009-12-22 15:37:13
Full thread dump Java HotSpot(TM) 64-Bit Server VM (10.0-b23 mixed mode):
"voldemort-niosocket-server2" daemon prio=10 tid=0x00002aac40114800 nid=0x3d59 waiting on condition [0x00000000428c7000..0x00000000428c7d10]
java.lang.Thread.State: RUNNABLE
at java.util.zip.Adler32.updateBytes(Native Method)
at java.util.zip.Adler32.update(Adler32.java:49)
at com.sleepycat.je.log.ChecksumValidator.update(ChecksumValidator.java:61)
at com.sleepycat.je.log.LogManager.getLogEntryFromLogSource(LogManager.java:713)
at com.sleepycat.je.log.LogManager.getLogEntry(LogManager.java:664)
at com.sleepycat.je.tree.IN.fetchTarget(IN.java:1215)
at com.sleepycat.je.dbi.CursorImpl.searchAndPosition(CursorImpl.java:2103)
at com.sleepycat.je.Cursor.searchInternal(Cursor.java:1778)
at com.sleepycat.je.Cursor.searchAllowPhantoms(Cursor.java:1748)
at com.sleepycat.je.Cursor.search(Cursor.java:1615)
at com.sleepycat.je.Cursor.getSearchKey(Cursor.java:1067)
at voldemort.store.bdb.BdbStorageEngine.get(BdbStorageEngine.java:169)
at voldemort.store.bdb.BdbStorageEngine.get(BdbStorageEngine.java:126)
at voldemort.store.bdb.BdbStorageEngine.getVersions(BdbStorageEngine.java:112)
at voldemort.store.bdb.BdbStorageEngine.getVersions(BdbStorageEngine.java:67)
at voldemort.store.DelegatingStore.getVersions(DelegatingStore.java:86)
at voldemort.store.DelegatingStore.getVersions(DelegatingStore.java:86)
at voldemort.server.protocol.vold.VoldemortNativeRequestHandler.handleGetVersion(VoldemortNativeRequestHandler.java:89)
at voldemort.server.protocol.vold.VoldemortNativeRequestHandler.handleRequest(VoldemortNativeRequestHandler.java:74)
at voldemort.server.niosocket.AsyncRequestHandler.read(AsyncRequestHandler.java:170)
at voldemort.server.niosocket.AsyncRequestHandler.run(AsyncRequestHandler.java:98)
at voldemort.server.niosocket.SelectorManager.run(SelectorManager.java:143)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
See http://blogs.oracle.com/charlesLamb/2006/09/adler32_vs_the_gc.html for a explanation of the base problem.
See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6919638 for how the problem was greatly exacerbated by the -XX:+ExplicitGCInvokesConcurrent flag causing CMS to run its (slow) concurrent collection while silently keeping JNI blocked for the duration.
Similar Messages
-
getting a java.util.zip.zipexception : a device attached to the system is not functioning error - what could cause such an error?
My program finds all zip files in an archive and then searches through them for xls files, which it extracts and re-locates.
I havent even a clue where to look for the cause of this exception but Ill attach at the bottom the code in the general vicitiny of the trigger so that you can get kind of an idea what Im trying to do, and if im lucky, even spot my problem. :) Thanks!!
//zips is an array of zip files
int found = 0;
File[] haveXLs = new File[zips.length];
for (int i = 0; i < zips.length; i++){
String fileName = new String("L:/Vision/Archive/" + zips.getName());
ZipFile archive = new ZipFile(fileName);
String name = zips[i].getName().substring(0,8);
for(Enumeration e = archive.entries(); e.hasMoreElements();){
ZipEntry entry = (ZipEntry) e.nextElement();
if(entry.getName().substring(0,8) == name){
haveXLs[found] = zips[i];
found++;Hey there a few things.
Make sure that you dont use fileseparators like you do. ("/")
Use the separator generated for your system.
Something like:
String sep = System.getProperty("file.separator");
You mentioned it work local, but not network.
Either you have plenty of harddrives or L: is a mapped drive.
Is it working at the mapped drive?
When you say on the network, how are you accessing the files?
Could it be possible for another user to lock a file, so you wont have access to it over the network?
BR.
MagDy -
Java.util.zip not handling Unicode filenames
I have a zip file that contains files with Asian filenames. java.util.zip.ZipFile opens it, but the filenames are garbled. Is there any way to handle filenames that contain unicode characters?
Of course, compression works on bytes, not some higher level constructs like Strings or files.
You can use the ZipOutputStream or DeflaterOutputStream for compression.
And the javadoc for Deflater even has a code example of compressing a String.
Edited by: Kayaman on May 22, 2011 5:04 PM -
How do I compress a string with java.util.zip - not a file ?
How do I compress a string with java.util.zip?
Is possible to compress something else except a file?Of course, compression works on bytes, not some higher level constructs like Strings or files.
You can use the ZipOutputStream or DeflaterOutputStream for compression.
And the javadoc for Deflater even has a code example of compressing a String.
Edited by: Kayaman on May 22, 2011 5:04 PM -
Ok I have jar file 3rd party, they have 2 entrys in their jar
inetsoft/report/images/printer.gif and
inetsoft/report/images/printer2.gif
Those files are identical best i can tell, and they cause the error. Is there a way to the JWS in version based mode to look up files on full name alones... and don't warry about diffing files with diffrent names ???
java.util.zip.ZipException: duplicate entry: inetsoft/report/images/printer2.gif
at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:165)
at java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:93)
at com.sun.javaws.jardiff.JarDiffPatcher.writeEntry(Unknown Source)
at com.sun.javaws.jardiff.JarDiffPatcher.applyPatch(Unknown Source)
at com.sun.javaws.cache.DownloadProtocol.applyPatch(Unknown Source)
at com.sun.javaws.cache.DownloadProtocol.access$1(Unknown Source)
at com.sun.javaws.cache.DownloadProtocol$RetrieveAction.actionDownload(Unknown Source)
at com.sun.javaws.cache.DownloadProtocol.doDownload(Unknown Source)
at com.sun.javaws.cache.DownloadProtocol.getResource(Unknown Source)
at com.sun.javaws.LaunchDownload.downloadJarFiles(Unknown Source)
at com.sun.javaws.LaunchDownload.downloadEagerorAll(Unknown Source)
at com.sun.javaws.Launcher.downloadResources(Unknown Source)
at com.sun.javaws.Launcher.handleApplicationDesc(Unknown Source)
at com.sun.javaws.Launcher.handleLaunchFile(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Thread.java:484)This sounds like an instance of bug: 4474211 (see http://developer.java.sun.com/developer/bugParade/bugs/4474211.html)
you can try out the fix for this by loading the 1.2 beta from the j2se 1.4.1 beta release, and using the new version of the JNLPDownloadServlet that can be found in the 1.2-beta developers pack at: http://java.sun.com/products/javawebstart/download-jnlp.html -
I want to unzip OpenOffice 1.0 files inside the OJVM but it fails into the native method java.util.zip.CRC32.updateBytes(CRC32.java).
The first execution of the code runs OK, but the second not.
After a long wait it shutdown the connection and the oracle trace file shows an stack trace like this:
*** 2003-04-18 11:31:31.926
*** SESSION ID:(17.97) 2003-04-18 11:31:31.926
java.lang.IllegalArgumentException
at java.util.zip.CRC32.updateBytes(CRC32.java)
at java.util.zip.CRC32.update(CRC32.java)
at java.util.zip.ZipInputStream.read(ZipInputStream.java)
at oracle.xml.parser.v2.XMLByteReader.fillByteBuffer(XMLByteReader.java:354)
at oracle.xml.parser.v2.XMLUTF8Reader.fillBuffer(XMLUTF8Reader.java:142)
at oracle.xml.parser.v2.XMLByteReader.saveBuffer(XMLByteReader.java:448)
at oracle.xml.parser.v2.XMLReader.fillBuffer(XMLReader.java:2012)
at oracle.xml.parser.v2.XMLReader.skipWhiteSpace(XMLReader.java:1800)
at oracle.xml.parser.v2.NonValidatingParser.parseMisc(NonValidatingParser.java:305)
at oracle.xml.parser.v2.NonValidatingParser.parseProlog(NonValidatingParser.java:274)
at oracle.xml.parser.v2.NonValidatingParser.parseDocument(NonValidatingParser.java:254)
at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:225)
at com.prism.cms.frontend.EditPropertiesActions.processUpload(EditPropertiesActions.java:1901)
Exception signal: 11 (SIGSEGV), code: 1 (Address not mapped to object), addr: 0x6d3a74a0, PC: [0x40263600, eomake_reference_to_eobjec
t()+80]
Registers:
%eax: 0x54a54000 %ebx: 0x40429c20 %ecx: 0x54a546bf
%edx: 0x6d3a7478 %edi: 0x402b27d0 %esi: 0x45c718ac
%esp: 0xbfffbf20 %ebp: 0xbfffbf48 %eip: 0x40263600
%efl: 0x00010206
The code of the java method is:
public static void processUpload(String id_page, String longname,
String filename, String filetype,
String s00)
throws SQLException {
Integer p_id = new Integer(id_page);
String toSource;
XMLDocument doc = null;
DOMParser theParser = null;
InputStream XSLStream = null;
BufferedWriter out = null;
#sql { select path||name||'.html' into :toSource from pages where id_page=:p_id };
if ("Cancel".equalsIgnoreCase(s00)) {
Jxtp.redirecUrl("/dbprism/ldoc/live/edit.html?p_source="+toSource);
return;
if ("no-file".equals(filename) && "no-contenttpye".equals(filetype)) {
Jxtp.redirecUrl("/dbprism/ldoc/live/edit.html?p_source="+toSource);
return;
if ("xml".equalsIgnoreCase(filetype))
#sql { call CMSj.moveFromUpload(:filename,:p_id) };
else if ("sxw".equalsIgnoreCase(filetype)) {
XSLProcessor processor = new XSLProcessor();
XSLStylesheet theXSLStylesheet = null;
BLOB locator = null;
// open sxw file, it will be in zip format with a file named content.xml
// then convert content.xml to document-v10.dtd with an stylesheet
#sql { select blob_content into :locator from wpg_document where name = :filename for update };
ZipInputStream zin = new ZipInputStream(locator.binaryStreamValue());
ZipEntry entry;
try {
while((entry=zin.getNextEntry())!=null)
if ("content.xml".equalsIgnoreCase(entry.getName())) {
Integer newVersion;
CLOB dstDoc;
CMSDocURLStreamHandlerFactory.enableCMSDocURLs();
try {
URL inUrl = new URL("cms:/stylesheets/sxw2document-v10.xsl");
XSLStream = inUrl.openStream();
// Create the Stylesheet from the stream
theXSLStylesheet = processor.newXSLStylesheet(XSLStream);
// Stores the document processing it with the given stylesheet
theParser = new DOMParser();
theParser.setValidationMode(theParser.NONVALIDATING);
theParser.setBaseURL(new URL("cms:/dtd/"));
theParser.parse(zin);
doc = theParser.getDocument();
#sql { SELECT NVL(MAX(version),0)+1 INTO :newVersion FROM content
WHERE cn_id_page = :p_id };
#sql { INSERT INTO content( cn_id_page, version, owner, status, source_file,
file_size, content, created, modified, created_by,
modified_by)
VALUES ( :p_id, :newVersion, sys_context('cms_context','user_id'),
'Uploaded', :filename, 0 , EMPTY_CLOB(), SYSDATE, SYSDATE,
sys_context('cms_context','user_id'),
sys_context('cms_context','user_id')) };
#sql { SELECT content INTO :dstDoc FROM content
WHERE cn_id_page = :p_id AND version = :newVersion for update };
#sql { call DBMS_LOB.trim(:inout dstDoc,0) };
out = new BufferedWriter(dstDoc.getCharacterOutputStream(),dstDoc.getChunkSize());
processor.processXSL(theXSLStylesheet, doc, new PrintWriter(out));
#sql { delete from wpg_document where name=:filename };
} catch (SAXParseException spe) {
throw new SQLException("processUpload SAXParseException: "+xmlError(spe));
} catch (SAXException se) {
throw new SQLException("processUpload SAXException: "+se.getLocalizedMessage());
} catch (XSLException xsle) {
throw new SQLException("processUpload XSLException: "+xsle.getLocalizedMessage());
} finally {
if (XSLStream!=null)
XSLStream.close();
if (theParser!=null)
theParser = null;
if (out!=null) {
out.flush();
out.close();
zin.close();
} catch (IOException ioe) {
throw new SQLException("processUpload IOException: "+ioe.getLocalizedMessage());
} finally {
if (XSLStream!=null)
XSLStream = null;
if (out!=null)
out = null;
if (zin!=null)
zin = null;
Jxtp.redirecUrl("/dbprism/ldoc/live/edit.html?p_source="+toSource);
Basically it takes the content from a BLOB column of the wpg_document table, unzip it using java.util.zip package, look for the file content.xml and parse it using Oracle XML toolkit.
Using an open source utility which replace java.util.package (http://jazzlib.sourceforge.net/) it works perfect because is a pure java application.
Best regards, Marcelo.
PD: I am using Oracle 9.2.0.2 on Linux.The cause of errors was a dying Westen Digital drive, specially the 48G partition reserved only for $ORACLE_BASE (/dev/sdb3 mounted on /opt/oracle).
A simple quick scan of unmounted partition (badblocks -v /dev/sdb3) reported more than thousand new bad blocks (compared to the last scan six months ago). Although I strongly believe, specially in the case of WDC drives, that the best utility to "repair" bad blocks is the one that opens a window and prints the message: "Go to the nearest shop and buy a new drive", I was very curious to prove my suspicion just on this drive. After zero-filling the partition with dd, then formatting it (mke2fs -cc) and mounting again, the 11g installation and database creation (on the same partition) successfully completed, performing fast and smoothly. To make sure it was not a casual event, I repeated the installation once again with full success. The database itself is working fine (by now). Well, the whole procedure took me more than four hours, but I'm pretty satisfied. I learned once again - stay away from Western Digital. As Oracle cannot rely on dying drive, my friend is going tomorrow to spend a 150+ euro on two 250G Seagate Barracudas and replace both WDC drives, even though the first drive seems to be healthy.
In general there is no difference between loading correct data from good disk into bad memory and loading the incorrect data from dying disk into good memory. In both cases the pattern is damaged. For everyone who runs into the problem similar to this, and the cause cannot be easily determined, the rule of thumb must be:
1. test memory and, if it shows any error, check sockets and test memory modules individually
2. check disks for bad blocks regardless of the result of memory testing
Therefore I consider your answer being generally correct.
Regards
NJ -
Java.util.zip.ZIPException
We are using Oracle Application Server 10g (10.1.2) with AIX OS version 5.3 release 6.
We are getting error while deploying a "*.war" file. Below is the full error we have got during the installation.
Error starting from below.
Failed to deploy web application. File /tmp/dir1341.tmp/abc.war is not a jar file.
Resolution :
Base Exception:
java.util.zip.ZIPException
Error opening zip file /tmp/dir1341.tmp/abc.war
Error opening zip file /tmp/dir1341.tmp/abc.war
Kindly suggest the best provided solution for the same.
Also let us know about the error belongs Oracle AS application?
OR
AIX OS Level error?Well as the error suggests, it is neither related to OracleAS nor AIX OS. It is complaining about the WAR file you are trying to deploy. Make sure your abc.war is a well formed WAR file. You can search google for tool to validate a war file.
Thanks
Shail -
Java.util.zip.ZipException: invalid entry size error -- help required
Hi all
I am sure this error would have been posted many number of times, but I would really appreciate if someone could help me with my problem. I am working on reading data from a .zip file, which in it has ~5GB data. All I am performing is a read operation through the piece of code specified below. This code worked well for .zip files handling till ~2.5GB
FileInputStream fis = new FileInputStream(filename);
BufferedInputStream bis = new BufferedInputStream(fis);
ZipInputStream zis = new ZipInputStream(bis);
StreamTokenizer tok = new StreamTokenizer( zis );
ZipEntry entry;
while((entry = zis.getNextEntry()) != null)
\\read from the zip file through the streamTokenizer
I just print what I read through the program, on the console.
But the error I get is
java.util.zip.ZipException: invalid entry size (expected 4294967295 but got 2117536490 bytes)
at java.util.zip.ZipInputStream.readEnd(Unknown Source)
at java.util.zip.ZipInputStream.read(Unknown Source)
at java.util.zip.InflaterInputStream.read(Unknown Source)
at java.io.StreamTokenizer.read(Unknown Source)
at java.io.StreamTokenizer.nextToken(Unknown Source)
at ZipFileStreams.getMessages(ZipFileStreams.java:677)
at ZipFileStreams.main(ZipFileStreams.java:814)
Could anybody give me hints as to what am I missing and where am i going wrong. Any help would be appreciated.
ThanksHi,
I get the same exception while reading a ZIP file. The size if the ZIP file is just 82KB but I am reading it over FTP not sure if it makes any difference. I am using JDK 1.4.2_05. Here is the code I am trying to execute.
public class TestFTP {
public static void main( String[] argv ) throws Exception {
String inboundPath = "/transfer/inbound/";
FTPClient ftp = new FTPClient();
ftp.connect("123");
ftp.login( "123", "123" );
ftp.changeWorkingDirectory(inboundPath);
FTPFile[] zipFiles = ftp.listFiles("*.zip");
TelnetClient telnetClient;
for(int i=0;i<zipFiles.length;i++){
System.out.println(zipFiles.getName());
ZipInputStream zis = new ZipInputStream(ftp.retrieveFileStream(zipFiles[i].getName()));
for (ZipEntry entry = zis.getNextEntry(); entry != null; entry = zis.getNextEntry()){
System.out.println(entry.getName());
The error message is
java.util.zip.ZipException: invalid entry size (expected 10291 but got 10233 bytes)
at java.util.zip.ZipInputStream.readEnd(ZipInputStream.java:367)
at java.util.zip.ZipInputStream.read(ZipInputStream.java:141)
at java.util.zip.ZipInputStream.closeEntry(ZipInputStream.java:91)
at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:69)
at test.TestFTP.main(TestFTP.java:41)
Exception in thread "main"
Please let me know if you were able to fix the problem.
Thanks -
Java.util.zip.ZipException Error
I created a jar file, and put in C:\tools
C:\tools>java -jar myjar.jar is working fine
However, if I try to run myjar.jar in other directories, then I have problems.
I already set the classpath:
SET CLASSPATH=.;%CLASSPATH%;C:\tools\myjar.jar;
Here's the error. Any ideas???
C:\>java -jar myjar.jar
Exception in thread "main" java.util.zip.ZipException: The system cannot find th
e file specified
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:112)
at java.util.jar.JarFile.<init>(JarFile.java:117)
at java.util.jar.JarFile.<init>(JarFile.java:55)You always need to specify a proper file name when you use the -jar switch. If you are not in c:\tools you have to run with "java -jar c:\tools\myjar.jar".
Setting the classpath in particular doesn't help becuase the file name given to the -jar switch will override all settings for classpath. http://java.sun.com/j2se/1.4/docs/tooldocs/findingclasses.html#userclass
But since you now have myjar.jar in your classpath, you can run the application from any directory with "java your.main.ClassName" :) -
Hi,
I'm using BEA WLS8.1 SP4 on HPUX Itanium2 with JDK 1.4.2.05.
When I'm trying to deploy my app's ear file it's throwing
out the error shown below (far below).
I've placed the ear file in /opt/bea_wls/weblogic81/server/bin/myserver/upload directory with all the permissions set.
Please could someone help me resolve this.
Thanks
Mouli
[J2EE:160029]I/O error while reading deployment - java.util.zip.ZipException: Could not find End Of Central Directory. java.util.zip.ZipException: Could not find End Of Central Directory at java.util.zip.ZipFile.open(Ljava.lang.String;I)I(Unknown Source) at java.util.zip.ZipFile.<init>(Ljava.io.File;I)V(Unknown Source) at java.util.jar.JarFile.<init>(Ljava.io.File;ZI)V(JarFile.java:127) at java.util.jar.JarFile.<init>(Ljava.io.File;)V(JarFile.java:92) at weblogic.j2ee.J2EEUtils.getArchiveEarInfo(Ljava.io.File;)Lweblogic.j2ee.DeploymentInfo;(J2EEUtils.java:294) at weblogic.j2ee.J2EEUtils.getDeploymentInfo(Ljava.io.File;)[Lweblogic.j2ee.DeploymentInfo;(J2EEUtils.java:206) at weblogic.j2ee.J2EEUtils.getDeploymentInfo(Lweblogic.application.ApplicationFileManager;)[Lweblogic.j2ee.DeploymentInfo;(J2EEUtils.java:158) at weblogic.j2ee.J2EEApplicationContainerFactory.initializeDeployment(Ljava.io.File;Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;)Lweblogic.management.configuration.ApplicationMBean;(J2EEApplicationContainerFactory.java:464) at weblogic.management.deploy.DeployerRuntime.unprotectedActivate(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;Lweblogic.management.deploy.DeploymentData;Ljava.lang.String;Z)Lweblogic.management.runtime.DeploymentTaskRuntimeMBean;(DeployerRuntime.java:854) at weblogic.management.deploy.DeployerRuntime.access$000(Lweblogic.management.deploy.DeployerRuntime;Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;Lweblogic.management.deploy.DeploymentData;Ljava.lang.String;Z)Lweblogic.management.runtime.DeploymentTaskRuntimeMBean;(DeployerRuntime.java:69) at weblogic.management.deploy.DeployerRuntime$1.run()Ljava.lang.Object;(DeployerRuntime.java:1532) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Lweblogic.security.subject.AbstractSubject;Ljava.security.PrivilegedAction;)Ljava.lang.Object;(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(Lweblogic.security.acl.internal.AuthenticatedSubject;Lweblogic.security.acl.internal.AuthenticatedSubject;Ljava.security.PrivilegedAction;)Ljava.lang.Object;(SecurityManager.java:121) at weblogic.management.deploy.DeployerRuntime.checkAndPerformDeployerActions(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;Lweblogic.management.deploy.DeploymentData;Ljava.lang.String;ZI)Lweblogic.management.runtime.DeploymentTaskRuntimeMBean;(DeployerRuntime.java:1523) at weblogic.management.deploy.DeployerRuntime.activate(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;Lweblogic.management.deploy.DeploymentData;Ljava.lang.String;Z)Lweblogic.management.runtime.DeploymentTaskRuntimeMBean;(DeployerRuntime.java:192) at jrockit.reflect.NativeMethodInvoker.invoke0(Ljava.lang.Object;ILjava.lang.Object;[Ljava.lang.Object;)Ljava.lang.Object;(Unknown Source) at jrockit.reflect.NativeMethodInvoker.invoke(Ljava.lang.Object;[Ljava.lang.Object;)Ljava.lang.Object;(Unknown Source) at jrockit.reflect.VirtualNativeMethodInvoker.invoke(Ljava.lang.Object;[Ljava.lang.Object;)Ljava.lang.Object;(Unknown Source) at java.lang.reflect.Method.invoke(Ljava.lang.Object;[Ljava.lang.Object;I)Ljava.lang.Object;(Unknown Source) at weblogic.management.internal.DynamicMBeanImpl.invokeLocally(Ljava.lang.String;[Ljava.lang.Object;[Ljava.lang.String;)Ljava.lang.Object;(DynamicMBeanImpl.java:754) at weblogic.management.internal.DynamicMBeanImpl.invoke(Ljava.lang.String;[Ljava.lang.Object;[Ljava.lang.String;)Ljava.lang.Object;(DynamicMBeanImpl.java:733) at com.sun.management.jmx.MBeanServerImpl.invoke(Ljava.lang.Object;Ljava.lang.String;[Ljava.lang.Object;[Ljava.lang.String;)Ljava.lang.Object;(MBeanServerImpl.java:1560) at com.sun.management.jmx.MBeanServerImpl.invoke(Ljavax.management.ObjectName;Ljava.lang.String;[Ljava.lang.Object;[Ljava.lang.String;)Ljava.lang.Object;(MBeanServerImpl.java:1528) at weblogic.management.internal.RemoteMBeanServerImpl.private_invoke(Ljavax.management.ObjectName;Ljava.lang.String;[Ljava.lang.Object;[Ljava.lang.String;)Ljava.lang.Object;(RemoteMBeanServerImpl.java:988) at weblogic.management.internal.RemoteMBeanServerImpl.invoke(Ljavax.management.ObjectName;Ljava.lang.String;[Ljava.lang.Object;[Ljava.lang.String;)Ljava.lang.Object;(RemoteMBeanServerImpl.java:946) at weblogic.management.internal.MBeanProxy.invoke(Ljava.lang.String;[Ljava.lang.Object;)Ljava.lang.Object;(MBeanProxy.java:954) at weblogic.management.internal.MBeanProxy.invokeForCachingStub(Ljava.lang.String;[Ljava.lang.Object;)Ljava.lang.Object;(MBeanProxy.java:481) at weblogic.management.runtime.DeployerRuntimeMBean_Stub.activate(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;Lweblogic.management.deploy.DeploymentData;Ljava.lang.String;Z)Lweblogic.management.runtime.DeploymentTaskRuntimeMBean;(DeployerRuntimeMBean_Stub.java:1139) at weblogic.management.console.actions.mbean.ApplicationDeployAction.prePerform(Lweblogic.management.console.actions.ActionContext;Lweblogic.management.console.actions.RequestableAction;)Lweblogic.management.console.actions.RequestableAction;(ApplicationDeployAction.java:179) at weblogic.management.console.actions.mbean.DoMBeanWizardAction.perform(Lweblogic.management.console.actions.ActionContext;)Lweblogic.management.console.actions.Action;(DoMBeanWizardAction.java:215) at weblogic.management.console.actions.internal.ActionServlet.doAction(Ljavax.servlet.http.HttpServletRequest;Ljavax.servlet.http.HttpServletResponse;)V(ActionServlet.java:173)Hi
THis may be due to the file was FTP to the directory as ASCII mode ...
Or the file is corrupt.
Try to pacgake again (with jar command)
Jin -
I got maven 221 installed
i got jdk 1.6 and 1.5 installed (have tested both)
I have a strange error. All my co-workers can build but I cant. The only thing I can find is that I dont have installed BEA Weblogic but I dont want to have that installed. It should be able to run anyway.
Could someone tell me what is wrong? If you need pom.xml I got that one as well.
process-classes:
[copy] Copying 4 files to C:\hudson\jobs\albpm_ip-identity-asserter_-_Build\workspace\target\mbean-content
[mkdir] Created dir: C:\hudson\jobs\albpm_ip-identity-asserter_-_Build\workspace\target\mbean-jar
[java] Creating an MJF from the contents of directory C:\hudson\jobs\albpm_ip-identity-asserter_-_Build\workspace\target\mbean-content...
[java] Compiling the files...
[java] Creating the list.
[java] Doing the compile.
[java] WLMaker-SubProcess: : Exception in thread "main" java.lang.Error: java.util.zip.ZipException: The system cannot find the file specified
[java] WLMaker-SubProcess: : at weblogic.management.commo.BeanGenDriver.getManagementTempDir(BeanGenDriver.java:93)
[java] WLMaker-SubProcess: : at weblogic.management.commo.BeanGenDriver.main(BeanGenDriver.java:117)
[java] WLMaker-SubProcess: : Caused by: java.util.zip.ZipException: The system cannot find the file specified
[java] WLMaker-SubProcess: : at java.util.zip.ZipFile.open(Native Method)
[java] WLMaker-SubProcess: : at java.util.zip.ZipFile.<init>(ZipFile.java:203)
[java] WLMaker-SubProcess: : at java.util.jar.JarFile.<init>(JarFile.java:132)
[java] WLMaker-SubProcess: : at java.util.jar.JarFile.<init>(JarFile.java:97)
[java] WLMaker-SubProcess: : at weblogic.management.commo.BeanGenDriver.getManagementTempDir(BeanGenDriver.java:90)
[java] WLMaker-SubProcess: : ... 1 more
[java] WLMaker-SubProcess: : Stopped draining WLMaker-SubProcess:
[java] WLMaker-SubProcess: : Stopped draining WLMaker-SubProcess:
[java] BeanGen code generation failed
[HUDSON] Archiving C:\hudson\jobs\albpm_ip-identity-asserter_-Build\workspace\pom.xml to C:\hudson\jobs\albpmip-identity-asserter_-Build\modules\dk.skat.ip.integration.albpm$ip-identity-asserter\builds\2010-11-2213-41-28\archive\dk.skat.ip.integration.albpm\ip-identity-asserter\1.2\pom.xml
[INFO] ------------------------------------------------------------------------from my experience, using weblogic jars can be a pain if the full install is not on the local box.
Note that you dont have to 'install' it. Just copy the directory.
Reason is that the jar files have manifests with relative classpaths.
For an example of horror take a look at the weblogic.jar MANIFEST's classpath entry.
-Fred -
Error: java.util.zip.ZipException: missing entry name
Does anybody know how to solve the following error? I got this error when I was trying to update files in my CVS.
OracleJSP: oracle.jsp.parse.JspParseException: Line # 2, <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
Error: java.util.zip.ZipException: missing entry name
ThanksHi,
I get the same exception while reading a ZIP file. The size if the ZIP file is just 82KB but I am reading it over FTP not sure if it makes any difference. I am using JDK 1.4.2_05. Here is the code I am trying to execute.
public class TestFTP {
public static void main( String[] argv ) throws Exception {
String inboundPath = "/transfer/inbound/";
FTPClient ftp = new FTPClient();
ftp.connect("123");
ftp.login( "123", "123" );
ftp.changeWorkingDirectory(inboundPath);
FTPFile[] zipFiles = ftp.listFiles("*.zip");
TelnetClient telnetClient;
for(int i=0;i<zipFiles.length;i++){
System.out.println(zipFiles.getName());
ZipInputStream zis = new ZipInputStream(ftp.retrieveFileStream(zipFiles[i].getName()));
for (ZipEntry entry = zis.getNextEntry(); entry != null; entry = zis.getNextEntry()){
System.out.println(entry.getName());
The error message is
java.util.zip.ZipException: invalid entry size (expected 10291 but got 10233 bytes)
at java.util.zip.ZipInputStream.readEnd(ZipInputStream.java:367)
at java.util.zip.ZipInputStream.read(ZipInputStream.java:141)
at java.util.zip.ZipInputStream.closeEntry(ZipInputStream.java:91)
at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:69)
at test.TestFTP.main(TestFTP.java:41)
Exception in thread "main"
Please let me know if you were able to fix the problem.
Thanks -
Hello,
We're trying to install Primavera EPPM 8.3 and test it on our server but having troubles in deploying p6 application.
We have successfully installed the following prerequisites:
- WebLogic 11g
- JDK1.7.0_45 and setting JAVA_HOME path=C:\Program Files\Java\jdk1.7.0_45 in enviornmental variables
- Downloading wsdl4j-1.6.2.jar for web services
- Running the setup.exe file (located in PEPPM path\Disk1\install\setup.exe
- Successfully finished the setup and running the Configuration Wizard.
- Successfully created the database using Microsoft SQL Server 2008 database
- Successfully creating a new WebLogic domain.
- We didn't install BI publisher nor any content repository ( would this affect running the primavera application? )
- In the configuration wizard summary we can see everything is marked successfully except the "Start Web Logic" step it showed an error and a message indicating that we should start it manually ( however, the domain is successfully created ).
Next, we run the startWebLogic.cmd file in our new created domain, then we run startNodeManager.cmd from WebLogic common/bin directory.
We can access the WebLogic administration panel successfully but no "p6" application in the deployments.
So, we click "install" then open the p6 directory and deploy it without errors.
But when when starting the P6 server and then try to start p6 application, it failed with the following error message:
java.util.zip.ZipException: invalid entry CRC (expected 0xa0a67af0 but got 0xef73b950)
Can you please help us to solve this? Please note that every other deployment is running correctly except p6.The cause of errors was a dying Westen Digital drive, specially the 48G partition reserved only for $ORACLE_BASE (/dev/sdb3 mounted on /opt/oracle).
A simple quick scan of unmounted partition (badblocks -v /dev/sdb3) reported more than thousand new bad blocks (compared to the last scan six months ago). Although I strongly believe, specially in the case of WDC drives, that the best utility to "repair" bad blocks is the one that opens a window and prints the message: "Go to the nearest shop and buy a new drive", I was very curious to prove my suspicion just on this drive. After zero-filling the partition with dd, then formatting it (mke2fs -cc) and mounting again, the 11g installation and database creation (on the same partition) successfully completed, performing fast and smoothly. To make sure it was not a casual event, I repeated the installation once again with full success. The database itself is working fine (by now). Well, the whole procedure took me more than four hours, but I'm pretty satisfied. I learned once again - stay away from Western Digital. As Oracle cannot rely on dying drive, my friend is going tomorrow to spend a 150+ euro on two 250G Seagate Barracudas and replace both WDC drives, even though the first drive seems to be healthy.
In general there is no difference between loading correct data from good disk into bad memory and loading the incorrect data from dying disk into good memory. In both cases the pattern is damaged. For everyone who runs into the problem similar to this, and the cause cannot be easily determined, the rule of thumb must be:
1. test memory and, if it shows any error, check sockets and test memory modules individually
2. check disks for bad blocks regardless of the result of memory testing
Therefore I consider your answer being generally correct.
Regards
NJ -
Cannot extract Zip file with Winzip after zipping with java.util.zip
Hi all,
I write a class for zip and unzip the text files together which can be zip and unzip successfully with Java platform. However, I cannot extract the zip file with Winzip or even WinRAR after zipping with Java platform.
Please help to comment, thanks~
Below is the code:
=====================================================================
package myapp.util;
import java.io.* ;
import java.util.TreeMap ;
import java.util.zip.* ;
import myapp.exception.UserException ;
public class CompressionUtil {
public CompressionUtil() {
super() ;
public void createZip(String zipName, String fileName)
throws ZipException, FileNotFoundException, IOException, UserException {
FileOutputStream fos = null ;
BufferedOutputStream bos = null ;
ZipOutputStream zos = null ;
File file = null ;
try {
file = new File(zipName) ; //new zip file
if (file.isDirectory()) //check if it is a directory
throw new UserException("Invalid zip file ["+zipName+"]") ;
if (file.exists() && !file.canWrite()) //check if it is readonly
throw new UserException("Zip file is ReadOnly ["+zipName+"]") ;
if (file.exists()) //overwrite the existing file
file.delete();
file.createNewFile();
//instantiate the ZipOutputStream
fos = new FileOutputStream(file) ;
bos = new BufferedOutputStream(fos) ;
zos = new ZipOutputStream(bos) ;
this.writeZipFileEntry(zos, fileName); //call to write the file into the zip
zos.finish() ;
catch (ZipException ze) {
throw ze ;
catch (FileNotFoundException fnfe) {
throw fnfe ;
catch (IOException ioe) {
throw ioe ;
catch (UserException ue) {
throw ue ;
finally {
//close all the stream and file
if (fos != null)
fos.close() ;
if (bos != null)
bos.close();
if (zos != null)
zos.close();
if (file != null)
file = null ;
}//end of try-catch-finally
private void writeZipFileEntry(ZipOutputStream zos, String fileName)
throws ZipException, FileNotFoundException, IOException, UserException {
BufferedInputStream bis = null ;
File file = null ;
ZipEntry zentry = null ;
byte[] bArray = null ;
try {
file = new File(fileName) ; //instantiate the file
if (!file.exists()) //check if the file is not exist
throw new UserException("No such file ["+fileName+"]") ;
if (file.isDirectory()) //check if the file is a directory
throw new UserException("Invalid file ["+fileName+"]") ;
//instantiate the BufferedInputStream
bis = new BufferedInputStream(new FileInputStream(file)) ;
//Get the content of the file and put into the byte[]
int size = (int) file.length();
if (size == -1)
throw new UserException("Cannot determine the file size [" +fileName + "]");
bArray = new byte[(int) size];
int rb = 0;
int chunk = 0;
while (((int) size - rb) > 0) {
chunk = bis.read(bArray, rb, (int) size - rb);
if (chunk == -1)
break;
rb += chunk;
}//end of while (((int)size - rb) > 0)
//instantiate the CRC32
CRC32 crc = new CRC32() ;
crc.update(bArray, 0, size);
//instantiate the ZipEntry
zentry = new ZipEntry(fileName) ;
zentry.setMethod(ZipEntry.STORED) ;
zentry.setSize(size);
zentry.setCrc(crc.getValue());
//write all the info to the ZipOutputStream
zos.putNextEntry(zentry);
zos.write(bArray, 0, size);
zos.closeEntry();
catch (ZipException ze) {
throw ze ;
catch (FileNotFoundException fnfe) {
throw fnfe ;
catch (IOException ioe) {
throw ioe ;
catch (UserException ue) {
throw ue ;
finally {
//close all the stream and file
if (bis != null)
bis.close();
if (file != null)
file = null ;
}//end of try-catch-finally
}Tried~
The problem is still here~ >___<
Anyway, thanks for information sharing~
The message is:
Cannot open file: it does not appear to be a valid archive.
If you downloaded this file, try downloading the file again.
The problem may be here:
if (fos != null)
fos.close() ;
if (bos != null)
bos.close();
if (zos != null)
zos.close();
if (file != null)
file = null ;
The fos is closed before bos so the last buffer is not
saved.
zos.close() is enough. -
Cannot use winzip to unzip the zip file zipped by java.util.zip
Hi all,
I use the followcode to create a zip file, and i downlaod it and try to use winzip to unzip this file but fail. The path is correct and i got the zip file. but it just cannot unzip.
pls help
thanks alot.
Kin
int count = 0;
count = ContentDocuments.size();
for (int i = 0; i < bb; i++) {
System.out.println(filenames[i] + "");
// Create a buffer for reading the files
byte[] buf = new byte[10*1024*1024];
try {
String outFilename = MyDir + "zipfile/" + getContentID2()+".zip";
System.out.println("outFilename = " + outFilename);
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename));
for (int i=0; i<filenames.length; i++) {
FileInputStream in = new FileInputStream(filenames);
out.putNextEntry(new ZipEntry(filenames[i]));
int len;
while ((len = in.read(buf)) != -1) {
out.write(buf, 0, len);
out.closeEntry();
in.close();
out.close();
} catch (IOException e) {
System.err.println("zipprocess " + e.getMessage());I've written a replacement zip file creator class. Not much tested but it seems to work, however I've yet to try it with the version of WINZIP that rejected my previous attempts. Oh, and the stored dates are garbage.
* ZipOutputFile.java
* Created on 25 March 2004, 13:08
package zip;
import java.io.IOException;
import java.nio.ByteBuffer;
* <p>Creates a ZIP archive in a file which WINZIP should be able to read.</p>
* <p>Unfortunately zip archives generated by the standard Java class
* {@link java.util.zip.ZipOutputStream}, while adhering to PKZIPs format specification,
* don't appear to be readable by some versions of WinZip and similar utilities. This is
* probably because they use
* a format specified for writing to a non-seakable stream, where the length and CRC of
* a file is writen to a special block following the data. Since the length of the binary
* date is unknown this makes an archive quite complicated to read, and it looks like
* WinZip hasn't bothered.</p>
* <p>All data is Deflated. Close completes the archive, flush terminates the current entry.</p>
* @see java.util.zip.ZipOutputStream
* @author Malcolm McMahon
public class ZipOutputFile extends java.io.OutputStream {
byte[] oneByte = new byte[1];
java.io.RandomAccessFile archive;
public final static short DEFLATE_METHOD = 8;
public final static short VERSION_CODE = 20;
public final static short MIN_VERSION = 10;
public final static int ENTRY_HEADER_MAGIC = 0x04034b50;
public final static int CATALOG_HEADER_MAGIC = 0x02014b50;
public final static int CATALOG_END_MAGIC = 0x06054b50;
private final static short DISC_NUMBER = 0;
ByteBuffer entryHeader = ByteBuffer.wrap(new byte[30]);
ByteBuffer entryLater = ByteBuffer.wrap(new byte[12]);
java.util.zip.CRC32 crcAcc = new java.util.zip.CRC32();
java.util.zip.Deflater def = new java.util.zip.Deflater(java.util.zip.Deflater.DEFLATED, true);
int totalCompressed;
long MSEPOCH;
byte [] deflateBuf = new byte[2048];
public static final long SECONDS_TO_DAYS = 60 * 60 * 24;
* Entry stores info about each file stored
private class Entry {
long offset; // position of header in file
byte[] name;
long crc;
int compressedSize;
int uncompressedSize;
java.util.Date date;
* Contructor also writes initial header.
* @param fileName Name under which data is stored.
* @param date Date to label the file with
* @TODO get the date stored properly
public Entry(String fileName, java.util.Date date) throws IOException {
name = fileName.getBytes();
this.date = date == null ? new java.util.Date() : date;
entryHeader.position(10);
putDate(entryHeader);
entryHeader.putShort(26, (short)name.length);
offset = archive.getFilePointer();
archive.write(entryHeader.array());
archive.write(name);
catalog.add(this);
crcAcc.reset();
totalCompressed = 0;
def.reset();
* Finish writing entry data. Save the lenghts & crc for catalog
* and go back and fill them in in the entry header.
public void close() throws IOException {
def.finish();
while(!def.finished())
deflate();
entryLater.position(0);
crc = crcAcc.getValue();
compressedSize = totalCompressed;
uncompressedSize = def.getTotalIn();
entryLater.putInt((int)crc);
entryLater.putInt(compressedSize);
entryLater.putInt(uncompressedSize);
long eof = archive.getFilePointer();
archive.seek(offset + 14);
archive.write(entryLater.array());
archive.seek(eof);
* Write the catalog data relevant to this entry. Buffer is
* preloaded with fixed data.
* @param buf Buffer to organise fixed lenght part of header
public void writeCatalog(ByteBuffer buf) throws IOException {
buf.position(12);
putDate(buf);
buf.putInt((int)crc);
buf.putInt(compressedSize);
buf.putInt(uncompressedSize);
buf.putShort((short)name.length);
buf.putShort((short)0); // extra field length
buf.putShort((short)0); // file comment length
buf.putShort(DISC_NUMBER); // disk number
buf.putShort((short)0); // internal attributes
buf.putInt(0); // external file attributes
buf.putInt((int)offset); // file position
archive.write(buf.array());
archive.write(name);
* This writes the entries date in MSDOS format.
* @param buf Where to write it
* @TODO Get this generating sane dates
public void putDate(ByteBuffer buf) {
long msTime = (date.getTime() - MSEPOCH) / 1000;
buf.putShort((short)(msTime % SECONDS_TO_DAYS));
buf.putShort((short)(msTime / SECONDS_TO_DAYS));
private Entry entryInProgress = null; // entry currently being written
private java.util.ArrayList catalog = new java.util.ArrayList(12); // all entries
* Start a new output file.
* @param name The name to store as
* @param date Date - null indicates current time
public java.io.OutputStream openEntry(String name, java.util.Date date) throws IOException{
if(entryInProgress != null)
entryInProgress.close();
entryInProgress = new Entry(name, date);
return this;
* Creates a new instance of ZipOutputFile
* @param fd The file to write to
public ZipOutputFile(java.io.File fd) throws IOException {
this(new java.io.RandomAccessFile(fd, "rw"));
* Create new instance of ZipOutputFile from RandomAccessFile
* @param archive RandomAccessFile
public ZipOutputFile(java.io.RandomAccessFile archive) {
this.archive = archive;
entryHeader.order(java.nio.ByteOrder.LITTLE_ENDIAN); // create fixed fields of header
entryLater.order(java.nio.ByteOrder.LITTLE_ENDIAN);
entryHeader.putInt(ENTRY_HEADER_MAGIC);
entryHeader.putShort(MIN_VERSION);
entryHeader.putShort((short)0); // general purpose flag
entryHeader.putShort(DEFLATE_METHOD);
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.clear();
cal.set(java.util.Calendar.YEAR, 1950);
cal.set(java.util.Calendar.DAY_OF_MONTH, 1);
// def.setStrategy(Deflater.HUFFMAN_ONLY);
MSEPOCH = cal.getTimeInMillis();
* Writes the master catalogue and postamble and closes the archive file.
public void close() throws IOException{
if(entryInProgress != null)
entryInProgress.close();
ByteBuffer catEntry = ByteBuffer.wrap(new byte[46]);
catEntry.order(java.nio.ByteOrder.LITTLE_ENDIAN);
catEntry.putInt(CATALOG_HEADER_MAGIC);
catEntry.putShort(VERSION_CODE);
catEntry.putShort(MIN_VERSION);
catEntry.putShort((short)0);
catEntry.putShort(DEFLATE_METHOD);
long catStart = archive.getFilePointer();
for(java.util.Iterator it = catalog.iterator(); it.hasNext();) {
((Entry)it.next()).writeCatalog(catEntry);
catEntry.position(0);
catEntry.putInt(CATALOG_END_MAGIC);
catEntry.putShort(DISC_NUMBER);
catEntry.putShort(DISC_NUMBER);
catEntry.putShort((short)catalog.size());
catEntry.putShort((short)catalog.size());
catEntry.putInt((int)(archive.getFilePointer() - catStart));
catEntry.putInt((int)catStart);
catEntry.putShort((short)0);
archive.write(catEntry.array(), 0, catEntry.position());
archive.setLength(archive.getFilePointer()); // truncate if old file
archive.close();
def.end();
* Closes entry in progress.
public void flush() throws IOException{
if(entryInProgress == null)
throw new IllegalStateException("Must call openEntry before writing");
entryInProgress.close();
entryInProgress = null;
* Standard write routine. Defined by {@link java.io.OutputStream}.
* Can only be used once openEntry has defined the file.
* @param b Bytes to write
public void write(byte[] b) throws IOException{
if(entryInProgress == null)
throw new IllegalStateException("Must call openEntry before writing");
crcAcc.update(b);
def.setInput(b);
while(!def.needsInput())
deflate();
* Standard write routine. Defined by {@link java.io.OutputStream}.
* Can only be used once openEntry has defined the file.
* @param b Bytes to write
public void write(int b) throws IOException{
oneByte[0] = (byte)b;
crcAcc.update(b);
write(oneByte, 0, 1);
* Standard write routine. Defined by {@link java.io.OutputStream}.
* Can only be used once openEntry has defined the file.
* @param b Bytes to write
* @param off Start offset
* @param len Byte count
public void write(byte[] b, int off, int len) throws IOException{
if(entryInProgress == null)
throw new IllegalStateException("Must call openEntry before writing");
crcAcc.update(b, off, len);
def.setInput(b, off, len);
while(!def.needsInput())
deflate();
* Gets a buffer full of coded data from the deflater and writes it to archive.
private void deflate() throws IOException {
int len = def.deflate(deflateBuf);
totalCompressed += len;
if(len > 0)
archive.write(deflateBuf, 0, len);
Maybe you are looking for
-
Is there a way to get my current 3G iphone upgraded to 3GS without buying another iphone? Thanks
-
I need Technical Presentation For WSA
Dear all i need technical presentation for cisco Web Security appliance only to show the benefit , deployment type , Competitor i need this presentation because the audiences and speaker are technical engineer
-
Cisco Security Manager related queries
In one of our projects, we are running CSM 3.2 on VMWare ESX 3.5.There is a project in place to have the ESX upgraded to 4.1 This looks like a challenge as CSM 3.2 is not supported on ESX 4.1. Cisco TAC has suggested to upgrade CSM to 4.2 Queries: 1.
-
Help! Gadgets won't function on FF home page but do in IE. Why?
I'm trying to load a gadget from igoogle into my ff home page. WHen the gadget appears I keep getting and error: can't load LM data, and other error codes. This has only happened with the last severql weeks. I am lost in thrying to get the language g
-
URLVariables and URLRequest not available ( Flash 8 )
I get the following errors when I try using URLVariables and URLRequest. Can anyone tell me what I'm doing wrong ? The class or interface 'flash.net.URLVariables' could not be loaded. var params:URLVariables = new URLVariables(); The class or interfa