在Java中重置文件上载时的InputStream

时间:2016-09-27 09:32:00

标签: java spring-mvc

我的InputStream处理有问题。我有SpringMVC项目的文件上传。文件是纯文本文件。我首先要确保字符编码,所以我使用流来检测字符集编码。然后根据这种编码我尝试读取文件。我的问题是当我检测到charset时,InputStream指针向前移动,所以当我尝试读取文件之后,它会跳过文件的开头。

我想我可以将读取字节添加到某些列表中,而不是首先读取此列表并继续使用流,但我不想在内存中以整个文件结束。

如何从文件上传的开头开始流?

2 个答案:

答案 0 :(得分:1)

XY问题。您不需要字符编码。只需使用流复制传入数据,而不是 var mqQueueManager = getMqQueueManager(ConfigurationManager.AppSettings["MQ_QueueManager"]); var mqQueue = mqQueueManager.AccessQueue(mqReceiveQueueName, MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_FAIL_IF_QUIESCING); MQGetMessageOptions gmo = new MQGetMessageOptions(); gmo.Options = MQC.MQGMO_NO_WAIT; for (int i = 0; i < maxMessagesToRead; i++) { var mqMessage = new MQMessage(); mqQueue.Get(mqMessage, gmo); messageTexts.Add(mqMessage.ReadString(mqMessage.MessageLength)); } Readers。这样,无论编码是什么,它都会被保留。

答案 1 :(得分:0)

读取某些数据后无法重新启动流,这是流的功能。 您可以使用任何您喜欢的Reader类,例如

new BufferedReader(new InputStreamReader(stream, charset));

如果你事先不知道charset并且它可能与默认值不同,你最好将流内容保存到内存结构或文件中,然后进行分析。