Changeset a51d260 for apps


Ignore:
Timestamp:
Jul 29, 2018 1:30:02 PM (2 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
5c3e4087
Parents:
b5ed39f1
Message:

Streaming: More efficient copying in MessageInputStream?
Log tweaks

File:
1 edited

Legend:

Unmodified
Added
Removed
  • apps/streaming/java/src/net/i2p/client/streaming/impl/MessageInputStream.java

    rb5ed39f1 ra51d260  
    266266    public void setReadTimeout(int timeout) {
    267267        if (_log.shouldLog(Log.DEBUG))
    268             _log.debug("Changing read timeout from " + _readTimeout + " to " + timeout);
     268            _log.debug("Changing read timeout from " + _readTimeout + " to " + timeout + ": " + hashCode());
    269269        _readTimeout = timeout;
    270270    }
     
    287287                buf.append(" blocks: ").append(_readyDataBlocks.size());
    288288               
    289                 buf.append(" not ready blocks: ");
     289                buf.append(" not ready blocks: [");
    290290                long notAvailable = 0;
    291291                for (Long id : _notYetReadyBlocks.keySet()) {
     
    297297                }
    298298               
    299                 buf.append("not ready bytes: ").append(notAvailable);
     299                buf.append("] not ready bytes: ").append(notAvailable);
    300300                buf.append(" highest ready block: ").append(_highestReadyBlockId);
     301                buf.append(" ID: ").append(hashCode());
    301302               
    302303                _log.debug(buf.toString(), new Exception("Input stream closed"));
     
    409410            if (_locallyClosed) throw new IOException("Input stream closed");
    410411            throwAnyError();
    411             for (int i = 0; i < length; i++) {
     412            int i = 0;
     413            while (i < length) {
    412414                if ( (_readyDataBlocks.isEmpty()) && (i == 0) ) {
    413415                    // ok, we havent found anything, so lets block until we get
     
    476478                        }
    477479                    }
    478                     // we looped a few times then got data, so this pass doesnt count
    479                     i--;
    480480                } else if (_readyDataBlocks.isEmpty()) {
    481481                    if (shouldDebug)
    482482                        _log.debug("read(...," + offset+", " + length+ ")[" + i
    483                                    + "] no more ready blocks, returning");
     483                                   + "] no more ready blocks, returning: " + hashCode());
    484484                    return i;
    485485                } else {
    486486                    // either was already ready, or we wait()ed and it arrived
    487487                    ByteArray cur = _readyDataBlocks.get(0);
    488                     byte rv = cur.getData()[cur.getOffset()+_readyDataBlockIndex];
    489                     _readyDataBlockIndex++;
     488                    int toRead = Math.min(cur.getValid() - _readyDataBlockIndex, length - i);
     489                    System.arraycopy(cur.getData(), cur.getOffset() + _readyDataBlockIndex, target, offset + i, toRead);
     490                    _readyDataBlockIndex += toRead;
    490491                    if (cur.getValid() <= _readyDataBlockIndex) {
    491492                        _readyDataBlockIndex = 0;
    492493                        _readyDataBlocks.remove(0);
    493494                    }
    494                     _readTotal++;
    495                     target[offset + i] = rv; // rv < 0 ? rv + 256 : rv
    496                     if ( (_readyDataBlockIndex <= 3) || (_readyDataBlockIndex >= cur.getValid() - 5) ) {
    497                         if (shouldDebug)
     495                    _readTotal += toRead;
     496                    if (shouldDebug) {
    498497                            _log.debug("read(...," + offset+", " + length+ ")[" + i
    499                                        + "] after ready data: readyDataBlockIndex=" + _readyDataBlockIndex
     498                                       + "] copied " + toRead + " after ready data: readyDataBlockIndex=" + _readyDataBlockIndex
    500499                                       + " readyBlocks=" + _readyDataBlocks.size()
    501                                        + " readTotal=" + _readTotal);
     500                                       + " readTotal=" + _readTotal + ": " + hashCode());
    502501                    }
     502                    i += toRead;
    503503                    //if (removed)
    504504                    //    _cache.release(cur);
    505505                }
    506             } // for (int i = 0; i < length; i++) {
     506            } // while (i < length) {
    507507        }  // synchronized (_dataLock)
    508508       
     
    528528        }
    529529        if (_log.shouldLog(Log.DEBUG))
    530             _log.debug("available(): " + numBytes);
     530            _log.debug("available(): " + numBytes + ": " + hashCode());
    531531       
    532532        return numBytes;
     
    588588                buf.append(available);
    589589                buf.append(" blocks: ").append(_readyDataBlocks.size());
    590                 buf.append(" not ready blocks: ");
     590                buf.append(" not ready blocks: [");
    591591                long notAvailable = 0;
    592592                for (Long id : _notYetReadyBlocks.keySet()) {
     
    596596                        notAvailable += ba.getValid();
    597597                }
    598                 buf.append("not ready bytes: ").append(notAvailable);
     598                buf.append("] not ready bytes: ").append(notAvailable);
    599599                buf.append(" highest ready block: ").append(_highestReadyBlockId);
     600                buf.append(" ID: ").append(hashCode());
    600601                _log.debug(buf.toString());
    601602            }
Note: See TracChangeset for help on using the changeset viewer.