Слишком долго для комментария, поэтому просто хотел подтвердить, что LineCollection
намного быстрее, чем подсегменты для строки по линии.
метод LineCollection намного быстрее в моих руках .
# Setup
x = np.linspace(0,4*np.pi,1000)
y = np.sin(x)
MAP = 'cubehelix'
NPOINTS = len(x)
Мы проверим итеративный график по методу LineCollection выше.
%%timeit -n1 -r1
# Using IPython notebook timing magics
fig = plt.figure()
ax1 = fig.add_subplot(111) # regular resolution color map
cm = plt.get_cmap(MAP)
for i in range(10):
ax1.set_color_cycle([cm(1.*i/(NPOINTS-1)) for i in range(NPOINTS-1)])
for i in range(NPOINTS-1):
plt.plot(x[i:i+2],y[i:i+2])
1 loops, best of 1: 13.4 s per loop
%%timeit -n1 -r1
fig = plt.figure()
ax1 = fig.add_subplot(111) # regular resolution color map
for i in range(10):
colorline(x,y,cmap='cubehelix', linewidth=1)
1 loops, best of 1: 532 ms per loop
Ускоренная выборка вашей линии для лучшего цветового градиента, как показывает выбранный вами ответ, по-прежнему является хорошей идеей, если вы хотите гладкий градиент, и у вас есть только несколько точек.
Попробуйте Java NIO :
URL website = new URL("http://www.website.com/information.asp");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream("information.html");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
Использование transferFrom ()
потенциально намного более эффективно, чем простой цикл, который считывает из исходного канала и записывает в этот канал. Многие операционные системы могут передавать байты напрямую из исходного канала в кеш файловой системы, не копируя их.
Подробнее об этом здесь .
Примечание : Третий параметр в transferFrom - это максимальное количество байтов для передачи. Integer.MAX_VALUE
передаст не более 2 ^ 31 байтов, Long.MAX_VALUE
позволит передать не более 2 ^ 63 байтов (больше, чем любой существующий файл).
Лично я обнаружил, что Apache HttpClient более чем способен на все, что мне нужно было сделать в связи с этим. Здесь - отличный учебник по использованию HttpClient
Для загрузки файла необходимо, чтобы вы его прочитали, в любом случае вам придется каким-то образом просмотреть файл. Вместо построчно, вы можете просто читать его по байтам из потока:
BufferedInputStream in = new BufferedInputStream(new URL("http://www.website.com/information.asp").openStream())
byte data[] = new byte[1024];
int count;
while((count = in.read(data,0,1024)) != -1)
{
out.write(data, 0, count);
}
public void saveUrl(final String filename, final String urlString)
throws MalformedURLException, IOException {
BufferedInputStream in = null;
FileOutputStream fout = null;
try {
in = new BufferedInputStream(new URL(urlString).openStream());
fout = new FileOutputStream(filename);
final byte data[] = new byte[1024];
int count;
while ((count = in.read(data, 0, 1024)) != -1) {
fout.write(data, 0, count);
}
} finally {
if (in != null) {
in.close();
}
if (fout != null) {
fout.close();
}
}
}
Вам нужно будет обработать исключения, возможно, внешние по отношению к этому методу.