Archivo (s) y InputStream / OutputStream

Hola comunidad de desbordamiento de pila,

Estoy procesando varios pasos en algunos datos que recibo con un Servlet de Java. El proceso actual que tengo es que ingreso los archivos a un servidor usando Apache File Upload y los convierto en a File. Luego, una vez que input1se rellena con datos, ejecuto un flujo similar a este (donde las funciones del proceso son transformaciones xsl):

File input1 = new File(FILE_NAME);  // <---this is populated with data
File output1 = new File(TEMP_FILE); // <---this is the temporary file

InputStream read = new FileInputStream(input1); 
OuputStream out = new FileOutputStream(output1);

process1ThatReadsProcessesOutputs( read, out);

out.close();
read.close();

//this is basically a repeat of the above process!
File output2 = new File(RESULT_FILE);  // <--- This is the result file 
InputStream read1 = new FileInputStream(output1);
OutputStream out1 = new FileOutputStream(output2);
Process2ThatReadsProcessesOutputs( read1, out1);
read1.close();
out1.close();

Entonces, mi pregunta es si hay una mejor manera de hacer esto para no tener que crear esos correos temporales Filey recrear transmisiones para esos Filecorreos electrónicos. (Asumo que estoy incurriendo en un rendimiento decente penatly)

Vi esta forma más eficiente de crear InputStream desde OutputStream, pero no estoy seguro de si esta es la mejor ruta a seguir ...

Respuesta 1

Simplemente reemplace FileOutputStreama ByteArrayInputStreamviceversa.

Ejemplo:

ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
Respuesta: 2

No sé por qué está convirtiendo el FileItem recuperado con Apache Commons si realmente no lo necesita. Puede usar lo mismo InputStreamque cada uno FileItemdebe usar y leer el contenido del archivo cargado:

// create/retrieve a new file upload handler
ServletFileUpload upload = ...;

// parse the request
List<FileItem> items = (List<FileItem>) upload.parseRequest(request);

/* get the FileItem from the List. Yes, it's not a best practice because you must verify 
   how many you receive, and check everything is ok, etc. 
   Let's suppose you've done it */
//...
FileItem item = items.get(0); 

// get the InputStrem to read the contents of the file 
InputStream is = item.getInputStream();

Finalmente, puede usar el InputStreamobjeto para leer la secuencia cargada enviada por el cliente evitando instancias innecesarias.

Y sí, es muy recomendable usar clases con buffer como BufferedInputStreamy BufferedOutputStream.

La otra idea podría ser evitar FileOutputStream(la del medio) y reemplazarla ByteArrayOutputStreamsi no necesita estar escrito en el disco (siempre es más lento que trabajar en la memoria).

Respuesta: 3

Subo mi objeto de clase de datos a Firestore, se carga bien, cuando intento descargarlo de otra actividad se produce java.lang.ClassCastException. Necesito el objeto de la clase Cart en AddToCart.java ...

El siguiente código funcionaba bien en java 1.6 y maven 2.2.1: la clase pública GTMEnrollmentOutputRecord extiende com.ibm.ivj.eab.record.cobol.CobolRecord implementa java.io.Serializable {public ...

Estoy intentando utilizar Alex Gorbatchevs Syntax Highlighter junto con una variedad de ejemplos de Java. En lugar de copiar y pegar cada ejemplo en su propia página html, me encantaría usar php ...

¿Hay alguna forma en un oyente de selección de árbol para saber si el cambio de selección fue realizado por un evento de teclado o un evento de mouse? Me gustaría desencadenar un evento diferente para estos dos. ¡Gracias!