[252025] OOM when publishing large files in EARs
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/ModulePackager.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/ModulePackager.java
index 336c4fb..31566ff 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/ModulePackager.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/ModulePackager.java
@@ -27,12 +27,16 @@
  * Packages resources to a .zip file
  */
 public class ModulePackager {
+	private static final int BUFFER_SIZE = 65536;
+	private byte[] readBuffers;
+	
 	private static final String JAR_FILE_SEPERATOR = "/"; //$NON-NLS-1$
 	private JarOutputStream outputStream;
-//	private StringBuffer manifestContents;
 
 	private boolean useCompression = true;
 
+	
+
 	/**
 	 * Create an instance of this class.
 	 * 
@@ -150,13 +154,13 @@
 
 		try {
 			output = new ByteArrayOutputStream();
-			int chunkSize = contentStream.available();
-			byte[] readBuffer = new byte[chunkSize];
-			int n = contentStream.read(readBuffer);
-
-			while (n > 0) {
-				output.write(readBuffer);
-				n = contentStream.read(readBuffer);
+			if( readBuffers == null )
+				readBuffers = new byte[BUFFER_SIZE];
+			int n = 0;
+			while (n > -1) {
+				n = contentStream.read(readBuffers);
+				if (n > 0)
+					output.write(readBuffers);
 			}
 		} finally {
 			if (output != null)