שאלה ב-JAVA - קריאה מקובץ

GilBates

New member
שאלה ב-JAVA - קריאה מקובץ

אני רוצה לקרוא מקובץ בחלקים קבועים (נניח 1 מ"ב) ולבצע עיבוד מסוים על כל חלק. הלולאה שלי היא:
while (offset < file.length() && (numRead = is.read(buf, offset, MAX_SIZE_IN_BYTES)) >= 0) { // do some process offset += numRead;​
בפעם הראשונה זה קורא יפה, אבל בפעם השניה (אם הקובץ מעל 2 מ"ב למשל)הוא עף על יציאה מגבולות מערך כי הקציתי את "באפ" לגודל 1 מ"ב ואני חושב שהוא מנסה להעתיק בפעם השניה (והבאות) ממיקום 1 מ"ב בקובץ למיקום 1 מ"ב פלוס בחוצץ (באפ). כלומר אין לי אפשרות לשלוט על האינדקס של מערך היעד (במקרה זה הבאפר) כמו למשל בSystem.arraycopy)( מה עושים?
 

voguemaster

New member
בוא אני אשאל אותך שאלה

מה קורה לדעתך בלולאה שלך כשאתה אכן קורא 1 מ"ב לתוך buf ? מלבד זה שהבאפר מתמלא, מה קורה ל-offset ? מה הערך שלו אחרי הקריאה ? באיטרציה הבאה של הלולאה הערך שלו הוא... ניחשת נכון... 1 מ"ב!! הקריאה שלך מנסה לקרוא בתים בהיסט offset לתוך buf. אם תקרא את התיעוד של read תגלה את זה בעצמך. ברור שהתוכנית שלך תתעופף במצב הזה. אם קראת 1 מ"ב אתה צריך לאפס בחזרה את offset, יש ? כלומר - offset הוא לא מאיפה לקרוא בקובץ אלא באיזה היסט לכתוב את הנתונים שנקראים ב-buf. ואחרי ההסבר המעלף-משהו הזה, למה אתה עובד ישירות עם InputStream ??? זה פשוט פשע!
 

GilBates

New member
תודה על העזרה ווגמאסטר, אבל

למה לא לעבוד עם FileInputStream .?
 
למעלה