Microsoft PowerPoint - 알고리즘_3주차_2차시.pptx

Similar documents
파일로출력하는작업순서 1. 파일을연다. 2. 파일로자료를쓴다. 3. 파일을닫는다. 파일입출력에사용되는클래스들. FileInputStream, FileOutputStream, FileReader, FileWriter 문자단위로입출력하기 사람이읽을수있는문자로만구성된파일을읽

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

12-file.key

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

설계란 무엇인가?

Microsoft PowerPoint - 04-UDP Programming.ppt

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

Network Programming

Java

Microsoft PowerPoint - [2009] 02.pptx

02 C h a p t e r Java

Microsoft PowerPoint - chap12.ppt [호환 모드]

슬라이드 1

C++ Programming

rmi_박준용_final.PDF

07 자바의 다양한 클래스.key

C++ Programming

C++ Programming

05-class.key

K&R2 Reference Manual 번역본

untitled

PowerPoint 프레젠테이션

PowerPoint Presentation

歯9장.PDF

2002년 2학기 자료구조

JAVA PROGRAMMING 실습 09. 예외처리

chap10.PDF

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

[ 정보 ] 과학고 R&E 결과보고서 Monte Carlo Method 를이용한 고교배정시뮬레이션 연구기간 : ~ 연구책임자 : 강대욱 ( 전남대전자컴퓨터공학부 ) 지도교사 : 최미경 ( 전남과학고정보 컴퓨터과 ) 참여학생 : 박진명 ( 전

Design Issues

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Modern Javascript

Microsoft PowerPoint - 03-TCP Programming.ppt

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

제11장 자바 입출력

신림프로그래머_클린코드.key

C프로-3장c03逞풚

Cluster management software

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

2007_2_project4

PowerPoint Presentation

13주-14주proc.PDF

PowerPoint Presentation

01-OOPConcepts(2).PDF

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

12 장파일입출력 파일입출력의기초파일열기, 사용하기, 닫기파일입출력모드문자단위파일입출력텍스트파일과이진파일 read, write 함수에의한이진파일입출력임의접근입출력스트림상태입출력연산자오버로딩과파일입출력 C++ 프로그래밍입문

chap7.key

09-Java Input Output

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

설계란 무엇인가?

Microsoft PowerPoint - Java7.pptx

슬라이드 1

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Template

Microsoft PowerPoint - Chapter 1-rev

Slide 1

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint Template

ch09

PowerPoint 프레젠테이션

Java ...

Cluster management software

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

chap 5: Trees

Microsoft PowerPoint - additional01.ppt [호환 모드]

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - 알고리즘_4주차_1차시.pptx

PowerPoint Presentation

교육자료

자바-11장N'1-502


Microsoft PowerPoint - Chapter 6.ppt

휠세미나3 ver0.4

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

PowerPoint Presentation

자바 프로그래밍

PowerPoint Presentation

Microsoft PowerPoint - java2-lecture2.ppt [호환 모드]

쉽게 풀어쓴 C 프로그래밍

Interstage5 SOAP서비스 설정 가이드

Microsoft PowerPoint - 9ÀÏ°_ÂüÁ¶ÀÚ.ppt

C++ Programming

Microsoft Word - EEL2 Lab5 예외처리와 스레드.docx

Index Process Specification Data Dictionary

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

Transcription:

3. C++ Stream Input/Output C++ 에서파일 : 바이트의나열 파일의끝에는 End-of-file fil 표시가존재 파일이 open될때stream이생성되며, 파일은 stream의 subclass 로정의 ios istream ostream ifstream iostream ofstream fstream 파일처리 Headers <iostream.h> and <fstream.h> class ifstream - input class ofstream - output class fstream - either input or output 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 25)

파일읽기와쓰기 파일에서읽기 파일에출력하기 파일객체생성 ifstream 객체이름 ; 파일객체생성 ofstream 객체이름 ; 파일열기객체이름.open( 파일이름 ); 파일열기객체이름.open( 파일이름 ); if ( 객체이름 ==NULL) 파일열기오류 if ( 객체이름 ==NULL) 파일열기오류 파일작업 객체이름 >> 변수 파일작업 객체이름 << 변수 파일닫기객체이름.close(); 파일닫기객체이름.close(); 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 26)

Example #include <iostream> using std::cerr; using std::cin; using std::cout; using std::ios; using std:endl; #include <fstream> // file stream using std::ofstream; // output file stream int main() { ofstream outclientfile; outclientfile.open( "clients.dat", ios::out ); if (!outclientfile ) { cerr << "File could not be opened" << endl; return 0; cout << "Enter the account, name, and balance." << endl << "Enter EOF to end input. n? "; int account; char name[ 30 ]; double balance; while ( cin >> account >> name >> balance ) { return 0; outclientfile << account << ' ' << name << ' ' << balance << endl; cout << "? "; // ofstream destructor closes file 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 27)

fstream 클래스 fstream 클래스 = ofstream + ifstream 파일모드정의 : open() 함수의인자로지정 파일모드설명예 ios::in 파일에서읽어오기파일객체.open( 파일이름, ios::in); ios::out 파일에출력하기파일객체.open( 파일이름, ios::out); ios::app 파일에추가하여출력하기파일객체.open( 파일이름, ios::app); ios::trunc ios::binary 파일이이미존재하는경우삭제하고새로운파일로생성하여출력이진파일로처리하기 파일객체.open( 파일이름, ios::trunc); 파일객체.open( 파일이름, ios::in ios::binary); 파일객체.open( 파일이름, ios::out ios::binary); 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 28)

File 의 read & write << 나 >> 연산자사용 : text 단위의입출력 read 정해진바이트만큼입력스트림에서 read 사용방법 : integer를읽을경우 ifile.read(reinterpret_cast<char *>(&number), sizeof(int)); First argument: pointer of type char * Second argument: number of bytes to read write 정해진바이트만큼해당메모리주소에서출력스트림에 write 사용방법 : integer 를출력할경우, ofile.write(reinterpret_cast<const char *>(&number), sizeof(int)); First argument: pointer of type const char * Second argument: number of bytes to write 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 29)

File 에서읽고쓰는위치변경 seekg (seek get) for istream and seekp (seek put) for ostream fileobject.seekg( n ) 파일의 n 번째바이트로이동 (ios::beg 을가정 ) fileobject.seekg( n, ios::cur ) 현재위치에서 n 바이트앞으로이동 fileobject.seekg( y, ios::end ) 파일의끝에서 y 바이트만큼이동 fileobject.seekg( 0, ios::end ) 파일의끝으로이동 tellg and tellp return current location of pointer location o = fileobject.tellg() //returns long fstream에서는동일한값을가짐 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 30)

Example: e:clientdata.h #include <string> using std::string; class ClientData { public: ClientData( int = 0, string = "", string = "", double = 0.0 0 ); // constructor void setaccountnumber( int ); int getaccountnumber() const; void setlastname( string ); string getlastname() const; void setfirstname( string ); string getfirstname() const; void setbalance( double ); double getbalance() const; // accessor functions for accountnumber // accessor functions for lastname // accessor functions for firstname // accessor functions for balance private: int accountnumber; char lastname[ 15 ]; char firstname[ 10 ]; double balance; ; 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 31)

Example: TransactionProcessing.cpp ocess (1) #include <iostream> using std::cerr; using std::cin; using std::cout; using std::endl; using std::fixed; using std::ios; using std::left; using std::right; using std::showpoint; t #include <fstream> using std::ofstream; using std::ostream; using std::fstream; #include <iomanip> using std::setw; using std::setprecision; #include <cstdlib> using std::exit; #include "ClientData.h" // ClientData class definition int enterchoice(); void createtextfile( fstream& ); void updaterecord( fstream& ); void newrecord( fstream& ); void deleterecord( fstream& ); void outputline( ostream&, const ClientData & ); int getaccount( const char * const ); enum Choices { PRINT = 1, UPDATE, NEW, DELETE, END ; 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 32)

Example: TransactionProcessing.cpp ocess (2) int main() { ft fstream inoutcredit( dit(" "credit.dat", ditd t" ios::in i ios::out ); // open for read and write if (!inoutcredit ) { cerr << "File could not be opened." << endl; exit ( 1 ); int choice; // store user choice while ( ( choice = enterchoice() )!= END ) { // enable user to specify action switch ( choice ) { case PRINT: // create text file from record file createtextfile( inoutcredit ); break; case NEW: // create record newrecord( inoutcredit ); break; case UPDATE: // update record updaterecord( inoutcredit ); break; case DELETE: // delete existing record deleterecord( inoutcredit ); break; default: // display error if user does not select valid choice cerr << "Incorrect choice" << endl; break; inoutcredit.clear(); // Clears all error flags including eofbit return 0; 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 33)

Example: TransactionProcessing.cpp ocess (3) int enterchoice() { // display available options cout << " nenter your choice" << endl << "1 - store a formatted text file of accounts" << endl << " called "print.txt " p for printing" << endl << "2 - update an account" << endl << "3 - add a new account" << endl << "4 - delete an account" << endl << "5 - end program n? "; int menuchoice; cin >> menuchoice; return menuchoice; // input menu selection from user 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 34)

Example: TransactionProcessing.cpp ocess (4) void createtextfile( fstream &readfromfile ) { ofstream outprintfile( tfil ("print.txt", t t" ios::out t) ); // create text t file if (!outprintfile ) { cerr << "File could not be created." << endl; exit( 1 ); outprintfile << left << setw( 10) <<"Account" << setw( 16) <<"Last Name" << setw( 11 ) << "First Name" << right << setw( 10 ) << "Balance" << endl; readfromfile.seekg( 0 ); // set file-position pointer to beginning of readfromfile ClientData client; // read first record from record file readfromfile.read( reinterpret_cast< char * >(&client), sizeof(clientdata)); while (!readfromfile.eof() ) { // copy all records from record file into text file // write single record to text file if ( client.getaccountnumber()!= 0 ) // skip empty records outputline( outprintfile, client ); // read next record from record file readfromfile.read( reinterpret_cast< char * >(&client), sizeof(clientdata)); 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 35)

Example: TransactionProcessing.cpp ocess (5) void newrecord( fstream &insertinfile ) { int accountnumber = getaccount( t( "Enter new account number" "); // account # 입력 insertinfile.seekg((accountnumber - 1) * sizeof(clientdata)); ClientData client; // read record from file insertinfile.read(reinterpret_cast<char read(reinterpret *>(&client) >(&client), sizeof(clientdata ); if ( client.getaccountnumber() == 0 ) { char lastname[ 15 ], firstname[ 10 ]; double balance; // 기존에레코드가없을경우, 추가 cout << "Enter lastname, firstname, balance n? "; cin >> setw( 15 ) >> lastname >> setw( 10 ) >> firstname >> balance; client.setlastname( lastname ); client.setfirstname( firstname ); client.setbalance( balance ); client.setaccountnumber( accountnumber ); insertinfile.seekp( ( accountnumber - 1 ) * sizeof( ClientData ) ); insertinfile.write(reinterpret_cast<constconst char *>(&client), sizeof(clientdata)); else // display error if account already exists cerr << "Account #" << accountnumber << " 이미저장됨." << endl; 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 36)

Example: TransactionProcessing.cpp ocess (6) void updaterecord( fstream &updatefile ) { int accountnumber = getaccount( t( "Enter account tto update" "); // account # 입력 updatefile.seekg( ( accountnumber - 1 ) * sizeof( ClientData ) ); ClientData client; // read first record from file updatefile.read( reinterpret_cast< char * >( &client ), sizeof( ClientData ) ); if ( client.getaccountnumber()!= 0 ) { // update record, if record exists in file outputline( cout, client ); // display the record cout << " nenter charge (+) or payment (-): "; double transaction; cin >> transaction; // 뭘할지를사용자에게질의 double oldbalance = client.getbalance(); // update record balance client.setbalance( oldbalance + transaction ); outputline( cout, client ); // write updated record over old record in file updatefile.seekp( ( accountnumber - 1)* sizeof( ClientData )); ); updatefile.write( reinterpret_cast< const char * >( &client ), sizeof(clientdata)); else // display error if account does not exist cerr << "Account #" << accountnumber << " has no information." << endl; 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 37)

Example: TransactionProcessing.cpp ocess (7) void deleterecord( fstream &deletefromfile ) { int accountnumber = getaccount( t( "Enter account tto delete" "); deletefromfile.seekg( ( accountnumber - 1 ) * sizeof( ClientData ) ); ClientData client; deletefromfile.read( read( reinterpret_cast< char* >( &client ), sizeof( ClientData )); ); if ( client.getaccountnumber()!= 0 ) { // delete record, if record exists in file ClientData blank; // create blank record // replace existing record with blank record deletefromfile.seekp( ( accountnumber - 1 ) * sizeof( ClientData ) ); deletefromfile.write(reinterpret_cast<const char *>(&blank), sizeof(clientdata)); cout << "Account #" << accountnumber << " deleted. n"; else cerr << "Account #" <<accountnumber << " is empty. n"; 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 38)

4. Streams and Files at Java Class Hierarchy FileReader/FileWriter i vs. FileInputStream/FileOutputStream 추가적인 Class 들 java.io.randomaccessfile Class Memory-mapped Files 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 39)

4.1 Class Hierarchy ( 대표적인것만 ) class java.lang.object class java.io.inputstream class java.io.fileinputstream class java.io.filterinputstream class java.io.bufferedinputstream class java.io.datainputstream (implements java.io.datainput) class java.io.objectinputstream (implements java.io.objectinput, ) class java.io.outputstream class java.io.fileoutputstream class java.io.filteroutputstream class java.io.bufferedoutputstream class java.io.dataoutputstream (implements java.io.dataoutput) class java.io.objectoutputstream (implements java.io.objectoutput, ) class java.io.randomaccessfile (implements java.io.datainput, java.io.dataoutput) class java.io.reader class java.io.bufferedreader class java.io.inputstreamreader class java.io.filereader class java.io.writer class java.io.bufferedwriter class java.io.outputstreamwriter class java.io.filewriter 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 40)

4.2 Reader/Writer vs. InputStream/OutputStream (1) FileReader/FileWriter char(unicode) 타입의데이터입출력 예 : FileReader reader = new FileReader("data data.txt txt"); int data = reader.read(); // 오류처리위해 int 반환 if (data!= -1) char ch = (char) data; 여러개의문자를읽을경우 char arr[] = new char[100]; int num = reader.read(arr); close 방법 : reader.close() 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 41)

4.2 Reader/Writer vs. InputStream/OutputStream (2) FileInputStream/FileOutputStream byte 타입의데이터입출력 read 와 write member function 은 Reader/Writer 와동일 import java.io.*; class OutputStreamExample1 { public static void main(string args[]) { FileOutputStream out = null; try { out = new FileOutputStream("./output.dat"); byte arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ; for (int cnt = 0; cnt < arr.length; cnt++) out.write(arr[cnt]); catch (IOException ioe) {System.out.println( println(" 파일로출력할수없습니다."); finally { try { out.close(); catch (Exception e) { 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 42)

4.3 추가적인 Class 들 Class 이름 Description DataInputStream Java primitive type의데이터 DataOutputStream 입출력 ObjectInputStream ObjectOutputStream BufferedReader BufferedInputStream BufferedWriter BufferedOutputStream Object 단위의데이터입출력 데이터를한꺼번에읽어서버퍼에저장해두는 class 데이터를버퍼에저장한후, 한꺼번에출력하는 class 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 43)

DataInputStream/DataOutputStream ataoutputst DataInputStream: byte stream primitive data type DataOutputStream: primitive i i data type byte stream 파일의입출력기능없음 : FileInputStream 등과연동 FileInputStream in1 = new FileInputStream("input input.dat dat"); DataInputStream in2 = new DataInputStream(in1); 주요 member function 들 DataInputStream DataOutputStream byte readbyte() void writebyte(int v) short readshort() void writeshort(int t(i t v) char readchar() void writechar(int v) int readint() void writeint(int v) long readlong() void writelong(long v) float readfloat() void writefloat(float v) double readdouble() void writedouble(double v) boolean readboolean() void writeboolean(boolean v) 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 44)

Example: DataOutputStream import java.io.*; class DataOutputExample1 { public static void main(string args[]) { DataOutputStream out = null; try { out = new DataOutputStream(new FileOutputStream("output.dat")); int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ; for (int cnt = 0; cnt < arr.length; cnt++) out.writeint(arr[cnt]); catch (IOException ioe) {System.out.println(" 파일로출력할수없습니다."); finally y{ try { out.close(); catch (Exception e) { 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 45)

ObjectInputStream/ObjectOutputStream ea ea ObjectInputStream: stream object ObjectOutputStream: O object stream 파일의입출력기능없음 : FileInputStream 등과연동 FileOutputStream in1 = new FileOutputStream("input input.dat dat"); ObjectOutputStream in2 = new ObjectOutputStream(in1); in2.writeobject(obj); obj가 serializable object일경우에만출력가능 class 선언시 java.io.serializable 을구현하도록선언 직렬화대상 : static이아닌필드들 ( 생성자, 메소드 x) 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 46)

Example: e:objectinputstream ea import java.io.*; import java.util.gregoriancalendar; import java.util.calendar; l class ObjectInputExample1 { public static void main(string args[]) { ObjectInputStream in = null; try { in = new ObjectInputStream(new FileInputStream("output.dat")); while (true) { GregorianCalendar calendar = (GregorianCalendar) in.readobject(); int year = calendar.get(calendar.year); int month = calendar.get(calendar.month) + 1; int date = calendar.get(calendar.date); System.out.println(year + "/" + month + "/" + date); catch (FileNotFoundException fnfe) {System.out.println( println(" 파일없음 "); catch (EOFException eofe) { System.out.println(" 끝 "); catch (IOException ioe) {System.out.println(" 파일을읽을수없습니다."); catch (ClassNotFoundException cnfe) {System.out.println(" 해당클래스가없음."); finally { try { in.close(); catch (Exception e) { 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 47)

Buffered ed Input(Output)Stream, Reader FileReader, FileWriter, File Input(Output)Stream read/write method 를호출할때마다 disk access 성능저하 Buffered Input(Output)Stream, Reader/Writer disk access 의단위를버퍼크기로제한 FileInputStream in1 = new FileInputStream("input.dat"); BufferedInputStream in2 = new BufferdInputStream(in1, 1024); 두번째인자를생략하면 default 크기의버퍼생성 나머지 member function 들은 FileInputStream 등과동일 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 48)

4.4 RandomAccessFile e Class Cass 앞에서보았던 IO class들은순차적인 access만지원 seek() 의개념이없음 RandomAccessFile File 에대한 random access 지원 FileInput(Output)Stream과별개의 class Object 의직속 subclass 로파일처리에관한모든기능들을독자적으로구현 Constructor/Method t th Description RandomAccessFile(String name, String mode) mode: "r" for read, "rw" for read and write long getfilepointer() lseek(fd, 0, 1) void seek(long pos) lseek(fd, pos, 0) long length() lseek(fd, 0, 2) 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 49)

Example: RandomAccessAccountRecord ccou eco d import java.io.*; public class RandomAccessAccountRecord A d extends AccountRecord { public static final int SIZE = 72; public void read( RandomAccessFile file ) throws IOException { setaccount(file.readint()); setfirstname(readname(file)); setlastname(readname(file)); setbalance(file.readdouble()); private String readname( RandomAccessFile file ) throws IOException { char name[] = new char[ 15 ], temp; for ( int count = 0; count < name.length; count++ ) { temp = file.readchar(); name[ count ] = temp; return new String( name ).replace( ' 0', ' ' ); public void write( RandomAccessFile file ) throws IOException { file.writeint( getaccount() ); writename( file, getfirstname() ); writename( file, getlastname() ); file.writedouble( getbalance() ); 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 50)

Example: RandomAccessFile e (1) import java.io.*; public class FileEditor { RandomAccessFile file; // reference to the file public FileEditor( File filename ) throws IOException { file = new RandomAccessFile(fileName, "rw"); public RandomAccessAccountRecord getrecord( int accountnumber ) throws IllegalArgumentException, gu NumberFormatException, o IOException { RandomAccessAccountRecord record = new RandomAccessAccountRecord(); // seek appropriate record in file file.seek( ( accountnumber - 1 ) * RandomAccessAccountRecord.SIZE ); record.read(file); return record; public void closefile() throws IOException { if ( file!= null ) file.close(); 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 51)

Example: RandomAccessFile e (2) public void updaterecord( int accountnumber, String fname, String lname, double bal) throws IllegalArgumentException, IOException { RandomAccessAccountRecord record = getrecord(accountnumber); if ( record.getaccount() == 0 ) throw new IllegalArgumentException( "Account does not exist" ); file.seek( ( accountnumber - 1 ) * RandomAccessAccountRecord.SIZE ); record = new RandomAccessAccountRecord( accountnumber, fname, lname, bal); record.write( file ); public void newrecord( int accountnumber, String fname, String lname, double bal) throws IllegalArgumentException, IOException { RandomAccessAccountRecord record = getrecord( accountnumber ); if ( record.getaccount()!= 0 ) throw new IllegalArgumentException( "Account already exists" ); file.seek( ( accountnumber - 1)* RandomAccessAccountRecord.SIZE ); record = new RandomAccessAccountRecord( accountnumber, fname, lname, bal); record.write( file ); 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 52)

4.5 Memory-mapped Files File을 memory 주소에 mapping한후, 배열을액세스하는것처럼 file 을액세스 RandomAccessFile 보다실행시간이매우빠름 사용방법 (java.nio.*, java.nio.channels.* 등이용 ) MappedByteBuffer 의 instance 획득 RandomAccessFile db = new RandomAccessFile("student.dat", "rw"); MappedByteBuffer mbb = db.getchannel().map(filechannel.mapmode.read_write, 0, db.getchannel().size()); // size 대신에파일크기입력가능 MappedByteBuffer의 method를이용하여데이터액세스 mbb.position((student.getid() - 1) * RandomAccessStudentRecord.SIZE); write: mbb.putint(), mbb.putdouble(), mbb.putchar() 등 read: mbb.getint(), mbb.getdouble(), mbb.getchar() 등 영남대학교데이터베이스연구실 Algorithm: Chapter 3 (Page 53)