일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- memory
- Java
- AfxMessageBox
- WebView
- darkmode
- 피보나치
- 피요모리2
- FirebaseAuth
- SPI
- 코인거스름돈
- LRU
- 리틀포레스트
- devicedriver
- MFC
- DynamicProgramming
- android
- 보늬밤
- synergy
- Dokka
- Kotlin
- 동적프로그래밍
- 형변환
- DataStructure
- Dialog
- Collection
- 제곱근
- 쌓기게임
- QoS
- math
- stack
- Today
- Total
퉁탕퉁탕 만들어보자
OutputStream 본문
InputStream을 봤으니 OutputStream도 보자,,
public static void writeToFile(Context context, String fileName, List<String> data) {
try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
context.openFileOutput(fileName, Context.MODE_PRIVATE))) {
for (String str : data) {
writer.write(str);
writer.write("\n");
}
} catch (IOException e) {
Log.e(TAG, "IOException occurred during file write: " + e.toString());
}
}
위의 예제는 Android에서 List<String> data를 file에 쓰는 예제이다.
public OutputStreamWriter(OutputStream out)
OutputStream을 argument로 받아서 생성한다.
사용법은 원하는 data형식에 맞는 write함수를 호출해주면된다.
public void write(String str) throws IOException
public void write(char cbuf[]) throws IOException
BufferedWriter로 OutputStreamWriter를 한겹 감싸야하는 이유는 무엇일까?
OutputStreamWriter에서 write() 메서드를 호출할 때마다 인코딩 변환기가 지정된 문자에 대해 호출되고, 그 바이트는 기본 출력 스트림에 쓰기 전에 버퍼에 누적된다. 따라서 문자 마다 인코딩변환을 하지 않도록 BufferedWriter 내에서 OutputStreamWriter를 래핑하는 것이 권장된다.
그리고 flush() 가 있다.
public void flush() throws IOException
flush하기전에는 buffer에 있는 상태인데, flush() 를 하면 버퍼에서 즉시 파일로 바로 쓰여지게된다. 여러번 쓰고 마지막에 flush 해주면 버퍼에 있는게 전부 flush 된다. 하지만 이게 바로 실제 file disk장치에 기록은 아니고 버퍼메모리 -> OS 레벨의 추상화된 file에 쓰여지게 된다.
그러면 다 쓰고나서 반드시 flush를 해줘야 할까?
BufferedWriter의 경우, 버퍼사이즈가 꽉 차거나 close()호출 시 flush를 해주기 때문에 중간중간 일부러 flush를 하거나 마지막에 꼭 flush를 할 필요는 없다.
outputStream역시 inputstream처럼 모두 쓰고나면 close()를 잊지않고 해주는것이 중요하다!!
그래서 편리하게 쓰는 법은 try-with-resource안에서 생성을 해주면 좋다.
또 String이 아닌 byte를 stream에 써야할때 쓰는 ByteArrayOutputStream이 있다.
사용법은 toByteArray()하면 byte[]을 받을 수 있다.
이때 바로 메모리가 한꺼번에 쫙! 할당되기 때문에 주의하자.
'Computer > Java' 카테고리의 다른 글
HashMap 충돌 (java 8) (0) | 2022.05.08 |
---|---|
InputStream (0) | 2022.05.07 |
Java의 primitive type, reference type, wrapper class (0) | 2022.04.17 |
Math class - Java (0) | 2022.04.03 |
String 함수들, 자료구조 - Java (0) | 2022.04.03 |