if ((currentSegmentIndex < 0) || (segmentPosition == GaeFile.SEGMENT_SIZE)) {
currentSegmentIndex++;
switchCurrentSegment();
}
FileSegmentDAO fileSegmentDAO = new FileSegmentDAO();
FileSegment fileSegment = getCurrentSegment();
int remainInSegment = GaeFile.SEGMENT_SIZE - segmentPosition;
int bytesToCopy = len < remainInSegment ? len : remainInSegment;
byte[] segmentData = getSegmentData(fileSegment, segmentPosition + bytesToCopy);
System.arraycopy(b, offset, segmentData, segmentPosition, bytesToCopy);
fileSegmentDAO.updateData(fileSegment, segmentData);
offset += bytesToCopy;
len -= bytesToCopy;
segmentPosition += bytesToCopy;
}