Stream closed ☕ Java

java.io.IOException: Stream closed

Code read or wrote a stream after it was closed — often by a try-with-resources block or a wrapper closing the underlying stream.

Seen on: Java

Meaning

Closing a wrapper (BufferedReader) closes the inner stream too. Servlet request bodies can only be read once.

Common causes

  • Using a stream after try-with-resources ended
  • Closing System.in/out through a wrapper
  • Reading a request body twice

⚡ Quick fix

  1. Keep stream usage inside the try block
  2. Don’t close System.in
  3. Cache the request body if you need it twice (ContentCachingRequestWrapper)

Detailed fix by platform

Java

  1. Read everything inside the try-with-resources block and return the result

How to diagnose

  1. Lifecycle — Where is it closed vs used?
  2. Recent change — Did it start after a deploy, upgrade, or configuration change? Compare with the last working version.

🧠 Still stuck? Analyze your error

Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.