Java에서 입출력 스트림은 데이터의 이동을 담당합니다. Java에는 다양한 입출력 스트림 클래스가 있습니다.

스트림은 '흐름'이라는 뜻이며, Java에서는 데이터의 흐름을 스트림이라고 합니다. 이 흐름은 단방향으로만 이동하기 때문에, 입력을 받기 위한 스트림과 출력을 하기 위한 스트림이 분리되어 있습니다.

Java의 입출력 스트림은 크게 바이트 기반 스트림과 문자 기반 스트림으로 나뉩니다.

  • 바이트 기반 스트림: 이 스트림은 바이트 데이터를 입력받거나 출력하는데 사용됩니다. 바이트 기반 스트림의 상위 클래스는 InputStream과 OutputStream입니다. 이 클래스들은 파일, 소켓 등에서 바이트 단위의 입출력을 수행하도록 설계되었습니다.
  • 문자 기반 스트림: 이 스트림은 문자 데이터를 입력받거나 출력하는데 사용됩니다. 문자 기반 스트림의 상위 클래스는 Reader와 Writer입니다. 이 클래스들은 텍스트 데이터의 입출력을 처리합니다.

모든 입출력 스트림 클래스들은 이 기본 클래스들을 상속받아 다양한 기능을 제공합니다. 예를 들어, 파일로부터 데이터를 읽거나 쓸 때는 FileInputStream, FileOutputStream, FileReader, FileWriter를 사용하고, 버퍼를 통해 데이터를 읽거나 쓸 때는 BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter를 사용합니다.

더욱 복잡한 입출력을 처리하려면, 보조 스트림을 사용할 수 있습니다. 보조 스트림은 기본 스트림에 추가적인 기능을 제공합니다. 예를 들어, DataInputStream과 DataOutputStream은 기본 스트림에 기본 데이터 타입의 입출력 기능을 추가합니다.

스레드 안전성이나 버퍼 크기 설정 등과 같은 고려사항은 특정 스트림을 효과적으로 사용하는데 중요할 있습니다.

 

/*
* 자바의 프로그램 실행시간 출력
* 로직의 수행시간을 출력하려면 System.currentTimeMillis() 메소드
* 1970년 1월 1일부터 년->월->일->시>분>초> 최종적으로 밀리초로 변환한 값을 출력
*/

long start = System.currentTimeMillis();

ArrayList a = new ArrayList();

for(int i=0;i<10000000;i++) {
	a.add(new Random().nextInt());
}

long end = System.currentTimeMillis();

System.out.println("start : " + start); //시작시간의 밀리세컨드
System.out.println("end : " + end);  //종료시간의 밀리케선드
System.out.println( "실행 시간 : " + ( end - start )/1000.0 +"초"); //최종 실행시간

 

* http.setDoOutput(true); 주석처리시 

java.net.ProtocolException: cannot write to a URLConnection if doOutput=false - call setDoOutput(true) at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1349) at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1342) at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:246) at com.tmax.kiwoomtest3.PaymentService.reqKiumPay(PaymentService.java:142) at com.tmax.kiwoomtest3.PaymentService.service(PaymentService.java:28) at com.tmax.superobject.object.TaskObject.execService(TaskObject.java:383) at com.tmax.superobject.object.TaskObject.processInWorkerThread(TaskObject.java:281) at com.tmax.superobject.object.TaskObject.run(TaskObject.java:223) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:503) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at com.tmax.superobject.runtime.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:29) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base/java.lang.Thread.run(Thread.java:829)

 

https://bamdule.tistory.com/179

https://e-you.tistory.com/217